Я работаю над более старым проектом, обновляя его. Часть программы имеет toolstrip со многими кнопками на нем, каждым с изображением. Я нашел, что изображения хранятся в Base64, закодировал imagestream в resx для формы и получил доступ как таковой:
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
...
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
...
this.toolStrip1.ImageList = this.imageList1;
...
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
...
this.toolStripButton1.ImageIndex = 0; //There are 41 images, so this can be between 0 and 40
Я должен добавить другую кнопку с новым изображением. Как я могу добавить изображение к этому потоку?
Я не могу использовать разработчика, поскольку это отказывает, как только я загружаю форму (я верю, потому что это использует пользовательский компонент с небезопасным кодом).
Я мог всегда просто добавлять новый ресурс изображения, отдельный от потока, но это сделает ту одну кнопку отличающейся, и таким образом это создало бы проблемы с непротиворечивостью, вызвав проблемы содержания позже. Таким образом, я задаюсь вопросом, существует ли какой-либо способ для меня отредактировать imagestream. Я могу получить доступ к сырым данным base64 строка, но я понятия не имею, куда пойти отсюда.
Я нашел способ сделать это с помощью кода:
imageList1.Images.Add( NEWIMAGE );
ResXResourceWriter writer = new ResXResourceWriter("newresource.resx");
writer.AddResource("imageList1.ImageStream",imageList1.ImageStream);
writer.Generate();
writer.Close();
writer.Dispose();
Код запишет обновленный ImageStream в новый файл ресурсов. Затем я могу скопировать его в свой текущий файл ресурсов.