我创建了一个ToolStripMenuItem实例,并希望将其作为子菜单添加到我表单上的两个不同菜单(到上下文菜单和菜单条)。我知道如何让它工作,但我想知道为什么这不起作用。
private static string[] parameters = { "itemOne", "itemTwo", "itemThree"};
private void MainForm_Load(object sender, EventArgs e)
{
foreach (string s in parameters)
{
ToolStripMenuItem addThis = new ToolStripMenuItem(s);
existingToolStripMenuItem.DropDownItems.Add(addThis);
existingMenuItem.DropDownItems.Add(addThis);
}
}
我注意到如果我注释掉其中一个DropDownItems.Add()语句或者我创建了两个单独的实例,它的工作正常。为什么这样做?
答案 0 :(得分:1)
如果您了解ToolStripItemCollection.Add
的实施情况,您会发现第二次调用existingMenuItem.DropDownItems.Add(addThis);
会从addThis
移除existingToolStripMenuItem.DropDownItems
。
因此,学习如何使用ILSpy等反编译器对.NET开发人员来说至关重要,
http://wiki.sharpdevelop.net/ilspy.ashx
可能的解决方法是在您发现时创建两个单独的实例。如果您打算将两个实例连接在一起,则可以使用ActionList,
http://www.lextm.com/2012/04/packaging-crads-actionlist-for-net-via-nuget/