Метка Добавление изображения программно -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);
Другие вопросы по тегам