1

我创建了一个 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() 语句或者如果我创建两个单独的实例,它工作正常。为什么这样做?

4

1 回答 1

1

如果您了解 的实现ToolStripItemCollection.Add,您会发现第二个调用从existingMenuItem.DropDownItems.Add(addThis);中删除。addThisexistingToolStripMenuItem.DropDownItems

因此,学习如何使用 ILSpy 等反编译器对于 .NET 开发人员来说至关重要,

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

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

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

于 2012-05-25T03:20:26.427 回答