C# 如何将图像添加到ToolStripMenuItem

C# 如何将图像添加到ToolStripMenuItem,c#,winforms,C#,Winforms,我有一个C#winForm项目,它使用ContextMenuStrip。我基于使用交互将ToolStripMenuItems动态添加到ContextMenuStrip。当我添加一个新的ToolStripMenuItem时,我设置了它的文本属性和图像属性。我不知道如何在不从图像所在位置获取图像的情况下设置图像属性。如何将imagine添加到我的项目中?下面是我的代码正在执行的一个示例 ContextMenuStrip cxtMnuStrp = new ContextMenuStrip;

我有一个C#winForm项目,它使用ContextMenuStrip。我基于使用交互将ToolStripMenuItems动态添加到ContextMenuStrip。当我添加一个新的ToolStripMenuItem时,我设置了它的文本属性和图像属性。我不知道如何在不从图像所在位置获取图像的情况下设置图像属性。如何将imagine添加到我的项目中?下面是我的代码正在执行的一个示例

ContextMenuStrip cxtMnuStrp = new ContextMenuStrip; private void Button_Click(object sender, EventArgs e) { // some filtering and logic // to determine weather to // create and add a ToolStripMenuItem // blah, blah, blah... ToolStripMenuItem item = new ToolStripMenuItem("uniqueName"); item.Image = Image.FromFile(@"C:\MyFolder\MyIcon.ico"); if (cxtMnuStrp.Items.ContainsKey(item) == false) cxtMnuStrp.Items.Add(item); } ContextMenuStrip cxtMnuStrp=新的ContextMenuStrip; 私有无效按钮\u单击(对象发送者,事件参数e) { //一些过滤和逻辑 //决定天气 //创建并添加ToolStripMenuItem //废话,废话,废话。。。 ToolStripMenuItem=新ToolStripMenuItem(“uniqueName”); item.Image=Image.FromFile(@“C:\MyFolder\MyIcon.ico”); if(cxtmnutrp.Items.ContainsKey(item)==false) cxtmnutrp.Items.Add(item); } 当我分发我的文件时,使用“item.Image=Image.FromFile(@“C:\MyFolder\MyIcon.ico”)”,每台机器都必须有“C:\MyFoler”目录,并且在其计算机上的“C:\MyFoler”目录中也必须有“MyIcon.ico”


另外,每次我想在ToolStripMenuItem中添加图标时,我都会点击硬盘,这似乎是不对的。您可以将图标保存在资源文件中,或者将图像保存为嵌入式资源

使用资源文件

将图像添加为嵌入式资源

您的代码将如下所示

private void BuildContextMenuStrip_Click(object sender, EventArgs e)
{
    ContextMenuStrip cxtMnuStrp = new ContextMenuStrip();

    ToolStripMenuItem item = new ToolStripMenuItem("uniqueName") { Image = WindowsFormsApplication2.Properties.Resources.Search.ToBitmap() };

    if (cxtMnuStrp.Items.Contains(item) == false)
        cxtMnuStrp.Items.Add(item);

    this.ContextMenuStrip = cxtMnuStrp;
}
注意:

  • 如果将图标添加到资源文件中。您必须使用.ToBitmap()将其转换为图像
  • 这些图像现在在intellisense中可用,而不是使用路径字符串
  • 我已将contextMenuStrip添加到上述示例中的表单中
  • 除了上面提供的关于如何在链接中添加资源的信息之外,您还可以按如下方式添加资源


    嘿,罗穆卢斯,我还有一个问题……如何使图标可点击?ToolStripMenuItem充当一个容器,您可以在其中添加图标或文本标题,也可以同时添加图标或文本标题,或者两者都添加,或者两者都不添加。当鼠标悬停时,它是接收整体焦点的容器,而不仅仅是图像或文本。类似地,当您单击它时,将调用ToolStripMenuItem.click事件。你需要处理那个事件。好的,谢谢。我知道ToolStripMenuItem有一个click事件,但我只想在图像上触发click事件,而不是文本。我该怎么办?