2012-05-25 42 views
1

我创建了一个ToolStripMenuItem的实例,并希望将它作为子菜单添加到我的表单上的两个不同菜单(上下文菜单和菜单条)。我知道如何让它工作,但我想知道为什么这不起作用。C#WinForms动态添加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()语句之一,它工作正常,或者如果我创建两个单独的实例。它为什么这样做?

回答

1

如果您了解ToolStripItemCollection.Add的实施情况,您会发现第二个电话existingMenuItem.DropDownItems.Add(addThis);existingToolStripMenuItem.DropDownItems中删除addThis

所以学习如何使用反编译器,如ILSpy是.NET开发的关键,

http://wiki.sharpdevelop.net/ilspy.ashx

可能的解决方法是创建两个单独的实例,你发现了。如果您打算将两个实例连接在一起,可以使用的ActionList,

http://www.lextm.com/2012/04/packaging-crads-actionlist-for-net-via-nuget/

+0

感谢ILSpy的建议。 – br4d