标签以编程方式添加图像-vs-使用VS2008 Designer添加图像

时间:2012-08-20 00:04:45

标签: c# design-view

我有一个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 文件中吗?然后,当将图像添加到标签时,我就可以像上面那样进行。

1 个答案:

答案 0 :(得分:0)

如果您在参考资料中保存图像,则可以执行以下操作:

        Label myLabel = new Label();
        myLabel.Text = "whatever";
        myLabel.Image = Properties.Resources.MyLabelImage;
        this.Controls.Add(myLabel);