我有一个C#表单,我完全手动创建(即不使用Visual Studio设计视图)。在这种形式中,我创建了一个 Label (简单),如下所示:
private Label myLabel = new Label();
稍后在代码中,在回调期间,我想为此标签设置图像。我找到了一种方法,这里是代码:
myLabel.Image = Image.FromFile("Images\\mark.png");
这样可行,但问题是,当我分发我的应用程序时,我将始终必须提供包含 mark.png <的文件夹( Images ) / em>的
我猜这是可以接受的,但这真的不是我想要的......
有趣的是,我查看了我创建的其他代码,其中我使用Visual Studio设计视图将图像添加到标签,而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 文件中吗?然后,当将图像添加到标签时,我就可以像上面那样进行。
答案 0 :(得分:0)
如果您在参考资料中保存图像,则可以执行以下操作:
Label myLabel = new Label();
myLabel.Text = "whatever";
myLabel.Image = Properties.Resources.MyLabelImage;
this.Controls.Add(myLabel);