C#WinForms动态添加ToolStripMenuItem。为什么这不起作用?

时间:2012-05-25 02:08:35

标签: winforms c#-4.0

我创建了一个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 个答案:

答案 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/