如何向 ToolStripMenuItem 添加图像

3
我有一个使用ContextMenuStrip的C# WinForm项目。我根据用户交互动态添加ToolStripMenuItem到ContextMenuStrip中。当我添加一个新的ToolStripMenuItem时,我设置它的Text属性和Image属性。我不知道如何在不从其位置取得图片的情况下设置Image属性。我该如何将图像添加到我的项目中呢?这是我的代码示例:
    ContextMenuStrip cxtMnuStrp = new ContextMenuStrip;
private void Button_Click(object sender, EventArgs e) { // 一些过滤和逻辑 // 来确定是否要创建并添加一个ToolStripMenuItem // blah, blah, blah...
ToolStripMenuItem item = new ToolStripMenuItem("uniqueName");
item.Image = Properties.Resources.MyIcon;
if (cxtMnuStrp.Items.ContainsKey(item) == false) cxtMnuStrp.Items.Add(item); }
对于“item.Image = Image.FromFile(@”C:\MyFolder\MyIcon.ico“)”,当我分发应用程序时,每台计算机都必须拥有“C:\ MyFoler”目录,并且还必须在其计算机上拥有“MyIcon.ico”文件,位于“C:\MyFoler”目录中。
此外,每次想要向ToolStripMenuItem添加图标时都需要访问硬盘似乎不是正确的做法。
1个回答

8
你可以将图标保存在资源文件中或将图像保存为嵌入式资源。

使用资源文件。

将图像作为嵌入式资源添加

你的代码将如下所示。

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;
}

注意:

  1. 如果您已经将图标添加到资源文件中,您需要使用 .ToBitmap() 将其转换为图像。
  2. 现在可以在智能感知中使用图像,而不是使用路径字符串。
  3. 我已将 contextMenuStrip 添加到上面示例中的表单中。

除了以上链接提供的有关如何添加资源的信息外,您还可以按以下方式添加它们。

enter image description here


嗨,Romulus,我又有一个问题……我该如何使图标可点击? - Max Eisenhardt
ToolStripMenuItem作为一个容器,你可以在其中添加图标、文字标题或两者都不加。当鼠标悬停时,整个容器会接受焦点,而不仅仅是图片或文本。同样的,当你点击它时,会触发ToolStripMenuItem.Click事件。你需要处理该事件。 - Patrick D'Souza
好的,谢谢。我知道ToolStripMenuItem有一个click事件,但我只想在单击图像时触发click事件,而不是文本。我该怎么做? - Max Eisenhardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接