0

我有一个完全手动创建的 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文件中吗?然后,当将图像添加到标签时,我可以像上面那样做。

4

1 回答 1

0

如果您将图像保存在资源中,您可以这样做:

        Label myLabel = new Label();
        myLabel.Text = "whatever";
        myLabel.Image = Properties.Resources.MyLabelImage;
        this.Controls.Add(myLabel);
于 2012-08-22T03:31:29.753 回答