我已经实现了我的解决方案(基本解决方案),我很高兴。
问题是当我使用“Add”方法向 ToolStripItemCollection 添加新项时,我得到了一些重载……有意义的是一个字符串参数、一个图像参数和一个 EventHandler 参数。
因为我的下拉列表将在运行时用作动态历史记录,这意味着它在编译时将为空。这意味着我无法通过使用设计器表面(单击时)的标准路线添加事件处理程序。我被迫使用上述重载。
我的图像对我没有用,但动态添加事件处理程序是我感兴趣的,需要帮助。
网址:http://msdn.microsoft.com/en-us/library/bxdt0s8t.aspx
没有其他重载可以帮助我,所以我必须使用 Image ...任何人有任何想法来解决这个问题并告诉我如何完全满足 add 方法的这个重载版本。
TIA。
更新:我在当前项目中重新做了一次,但使用了更流畅的代码,但原理是一样的,在运行时动态添加事件处理程序。当我回到家时,我会用一些示例代码更新它。
最佳答案
我这样做的方法是创建一个 ToolStripMenuItems
数组,并用我要添加的项目填充该数组。我创建了一种方法来处理点击事件,并让它检查我在运行时创建的每个项目的独特之处。您可以尝试使用每个 ToolStripMenuItem
的 Name
或 Tag
属性。然后在要添加的菜单中当场使用 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/