Метка Добавление изображения программно -vs- Добавление изображения с помощью дизайнера VS2008
У меня есть форма C#, которую я создаю полностью вручную (т.е. без использования Visual Studio Design View). В этой форме я создал (просто) ярлык следующим образом:
private Label myLabel = new Label();
Позже в коде, во время обратного вызова, я хочу установить изображение для этой метки. Я нашел один способ сделать это, и вот код:
myLabel.Image = Image.FromFile("Images\\mark.png");
Это работает, но проблема в том, что когда я распространяю свое приложение, мне всегда нужно предоставлять папку (Images), содержащую mark.png.
Это приемлемо, я думаю, но это действительно не то, что я хочу...
Интересно то, что я посмотрел на другой код, который я создал, где я использовал Visual Studio Design View, чтобы добавить изображение к метке, и Designer делает это совершенно по-другому. Он каким-то образом анализирует изображение, вычисляет двоичный файл и сохраняет представление этого двоичного файла в виде base64 в виде строки в файле .resx:
<data name="fileDisconnect.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABkAAAAXCAYAAAD+4+QTAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAA10RVh0U291cmNlAE51dm9sYaxPNfEAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5F
...
...
ns2di2Jn545YY+PJHw3ZbmREJBgZLDwzgehomExoMpmUG1spVLuhAG/80RSKwyEGo7ZBJNKcsrf/Pd7Q
MOijAUML48mPeAPCJ5FKhMcSBOt9Ach5ThKVujqeQvEa8v8FrglBl5d/7zYAAAAASUVORK5CYII=
</value>
Взглянув на исходный код файла Designer, вы можете увидеть, что он задает изображение следующим образом:
this.fileConnect.Image = ((System.Drawing.Image)(resources.GetObject("fileConnect.Image")));
Так что, как вы можете видеть, делать это намного элегантнее. Нет необходимости фактически сохранять изображение на жестком диске и предоставлять изображение при доставке приложения. Информация об изображении хранится в файле .resx, и изображения устанавливаются так, чтобы двоичный контент передавался программно из .resx.
У меня вопрос... Если я создаю свой элемент управления вручную, как я могу получить такое же поведение? Могу ли я создать файл.resx, открыть изображение с помощью редактора HEX и скопировать двоичную строку в файл.resx? Затем, добавляя изображение на этикетку, я мог просто сделать это, как описано выше.
1 ответ
Если вы сохраните изображение в Ресурсах, вы можете просто сделать это:
Label myLabel = new Label();
myLabel.Text = "whatever";
myLabel.Image = Properties.Resources.MyLabelImage;
this.Controls.Add(myLabel);