C# ToolStripButton:what';以编程方式指定图像是错误的

C# ToolStripButton:what';以编程方式指定图像是错误的,c#,toolstripbutton,C#,Toolstripbutton,有一个带有工具条的窗体。此ToolStrip包含ToolStripButton。我要将图像分配给此按钮: this.btnSaveFile.Image = Bitmap.FromFile("C:\\Work\\Icons\\png\\save.png"); 只有在指定的路径上有save.png时,它才起作用。否则,我会得到一个FileNotFound异常 如果我通过表单设计器创建表单,Visual Studio将创建如下代码: this.toolStripButton9.Image = ((S

有一个带有工具条的窗体。此ToolStrip包含ToolStripButton。我要将图像分配给此按钮:

this.btnSaveFile.Image = Bitmap.FromFile("C:\\Work\\Icons\\png\\save.png");
只有在指定的路径上有save.png时,它才起作用。否则,我会得到一个FileNotFound异常

如果我通过表单设计器创建表单,Visual Studio将创建如下代码:

this.toolStripButton9.Image = ((System.Drawing.Image) (resources.GetObject("toolStripButton9.Image")));
toolStripButton9。此处的图像不是真实名称。Visual Studio将我的文件save.png转换为toolStripButton9.Image

但是我以编程方式创建表单,没有设计器。我的问题是如何以编程方式将图像分配给ToolStripBotton

我试图将图像添加到项目中,但没有多大帮助。我不知道如何让VisualStudio获取它并将其嵌入到我的可执行文件中,这样我就不需要在指定位置使用该文件

在MSDN中,我只看到如下解决方案:


但它并不像我上面说的那样有效。我知道有一个简单的解决方案,但没有看到它。您能给我一个提示吗?

在Visual Studio中,在解决方案资源管理器中打开“属性”文件夹,然后打开Resources.resx文件并将现有图像文件添加为资源。然后,您可以通过资源静态类以编程方式使用它:

Image x = Resources.MyResourceImage;
我建议的代码的完整示例如下:

using System.Windows.Forms;
using Testapplication.Properties;

namespace Testapplication {
    public class Class1 {
        public Class1() {
            Form MyForm = new Form();
            ToolStrip MyToolStrip = new ToolStrip();
            MyForm.Controls.Add(MyToolStrip);

            ToolStripButton MyButton = new ToolStripButton();
            MyToolStrip.Items.Add(MyButton);

            MyButton.Image = Resources.MyResourceImage;

            MyForm.Show();
        }
    }
}
别忘了向YourApps的属性命名空间添加using。Resources.resx(.cs)文件位于该命名空间中,用于提供像图像这样的强类型对象引用。在您的情况下,将“MyResourceImage”替换为“save”(省略引号)

附:浏览一下我的Resources.designer.cs文件中最重要的部分:

internal static System.Drawing.Bitmap MyResourceImage {
    get {
        object obj = ResourceManager.GetObject("MyResourceImage", resourceCulture);
        return ((System.Drawing.Bitmap)(obj));
    }
}

你是说从嵌入式资源设置图像

string res = "MyAssembly.Resources.toolStripButton9.Image";
Stream s = this.GetType().Assembly.GetManifestResourceStream( res );
Icon icon = Icon.FromStream( s );

如果有效,请使用Webleeuws的答案,比这个简单得多:p

谢谢:),它对我有效,但我不知道这是否是Racoon寻求的解决方案。PoweRoy,谢谢你的答案。对不起,我不明白。我没有toolStripButton9.Image,因为我没有使用表单设计器。所以我不知道如何使用这段代码。。。Webleeuws似乎接近解决方案,但。。。请看我对他的回答的评论。谢谢你的回答。对不起,好像不行。我通过属性->资源添加了save png.file。现在我在我的项目下的资源文件夹中看到了它。但是我怎么能提到它呢?我可以放置什么来代替MyResourceImage?文件resource.Designer.cs是用以下代码自动创建的:object obj=ResourceManager.GetObject(“save”,resourceCulture);但是我没有使用这样的结构…知道吗?如果让intellisense填充空白。如果键入“Resources”,会发生什么。“它给出了什么建议?Webleeuw,是的,它很有效!非常感谢您的示例!我用额外的信息更新了我的答案,希望能进一步帮助你!非常感谢您的示例!
string res = "MyAssembly.Resources.toolStripButton9.Image";
Stream s = this.GetType().Assembly.GetManifestResourceStream( res );
Icon icon = Icon.FromStream( s );