c# - 将 ToolStripMenuItems 动态添加到 MenuStrip (C#/Winforms)

标签 c# winforms menuitem

我已经实现了我的解决方案(基本解决方案),我很高兴。

问题是当我使用“Add”方法向 ToolStripItemCollection 添加新项时,我得到了一些重载……有意义的是一个字符串参数、一个图像参数和一个 EventHandler 参数。

因为我的下拉列表将在运行时用作动态历史记录,这意味着它在编译时将为空。这意味着我无法通过使用设计器表面(单击时)的标准路线添加事件处理程序。我被迫使用上述重载。

我的图像对我没有用,但动态添加事件处理程序是我感兴趣的,需要帮助。

网址:http://msdn.microsoft.com/en-us/library/bxdt0s8t.aspx

没有其他重载可以帮助我,所以我必须使用 Image ...任何人有任何想法来解决这个问题并告诉我如何完全满足 add 方法的这个重载版本。

TIA。

更新:我在当前项目中重新做了一次,但使用了更流畅的代码,但原理是一样的,在运行时动态添加事件处理程序。当我回到家时,我会用一些示例代码更新它。

最佳答案

我这样做的方法是创建一个 ToolStripMenuItems 数组,并用我要添加的项目填充该数组。我创建了一种方法来处理点击事件,并让它检查我在运行时创建的每个项目的独特之处。您可以尝试使用每个 ToolStripMenuItemNameTag 属性。然后在要添加的菜单中当场使用 AddRange。所以你的代码可能看起来像这样:

private void BuildMenuItems()
{
    ToolStripMenuItem[] items = new ToolStripMenuItem[2]; // You would obviously calculate this value at runtime
    for (int i = 0; i < items.Length; i++)
    {
        items[i] = new ToolStripMenuItem();
        items[i].Name = "dynamicItem" + i.ToString();
        items[i].Tag = "specialDataHere";
        items[i].Text = "Visible Menu Text Here";    
        items[i].Click += new EventHandler(MenuItemClickHandler);
    }

    myMenu.DropDownItems.AddRange(items);
}

private void MenuItemClickHandler(object sender, EventArgs e)
{
    ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
    // Take some action based on the data in clickedItem
}

关于c# - 将 ToolStripMenuItems 动态添加到 MenuStrip (C#/Winforms),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757574/

相关文章:

c# - 在 Azure Functions 中查询外部表

c# - 无法在Windows主机上上传asp.net mvc3网站

c# - Windows 窗体 - 如何保存和加载游戏?

c# - 普通文本框中的自动文本更正

android - ActionMode 菜单不隐藏菜单项

c# - 让 Windows Store Sockets 与 Netcat 聊天?

c# - 在不使用任何外部文件的情况下使用 C# 列出回收站中的文件名

c# - 抓取位图图像(Winforms)并转换为 WPF 图像失败

c# - 增加 MenuItem.Icon WPF 的大小

click - Electron :在单击 native 菜单项时在BrowserWindow中打开html页面