我有一个完全手动创建的 C# 表单(即不使用 Visual Studio 设计视图)。在这种形式中,我创建了一个标签(简单),如下所示:
private Label myLabel = new Label();
稍后在代码中,在回调期间,我想为此标签设置图像。我找到了一种方法,这里是代码:
myLabel.Image = Image.FromFile("Images\\mark.png");
这可行,但问题是,当我分发我的应用程序时,我总是必须提供一个包含mark.png的文件夹( Images ) 。
我想这是可以接受的,但这真的不是我想要的......
有趣的是,我查看了我创建的其他一些代码,其中我使用 Visual Studio 设计视图将图像添加到标签,而设计器则完全不同。它以某种方式解析图像,计算出二进制文件,并将该二进制文件的 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文件中吗?然后,当将图像添加到标签时,我可以像上面那样做。