C#为什么可以';我不能在ToolStripMenuItem中获取包含子菜单项的菜单项吗?

C#为什么可以';我不能在ToolStripMenuItem中获取包含子菜单项的菜单项吗?,c#,items,toolstripmenu,C#,Items,Toolstripmenu,想要创建菜单和子菜单(单击时也有事件),但不知道如何插入已创建对象的下拉项? 当我插入注释代码时,总是在最后一个菜单上获取所有子项,其他子项没有 private System.Windows.Forms.ToolStripDropDownButton tlsDropDown; List<ToolStripMenuItem> ToolStripListForInsert = new List<ToolStripMenuItem>() {

想要创建菜单和子菜单(单击时也有事件),但不知道如何插入已创建对象的下拉项? 当我插入注释代码时,总是在最后一个菜单上获取所有子项,其他子项没有

    private System.Windows.Forms.ToolStripDropDownButton tlsDropDown;

    List<ToolStripMenuItem> ToolStripListForInsert = new List<ToolStripMenuItem>() 
    {
        new ToolStripMenuItem("Erase"), new ToolStripMenuItem("Change"), new ToolStripMenuItem("NewChange")
    };

    for (int i = 0; i < 10; i++)
    {
        tlsDropDown.DropDownItems.Add(new ToolStripMenuItem("NewItem", null, new ToolStripMenuItem("Erase"), new ToolStripMenuItem("Change"), new ToolStripMenuItem("NewChange")));

        // why this don't work - for all menu items --- work only for last one
        /*tlsDropDown.DropDownItems.Add(new ToolStripMenuItem(names[i], null, ToolStripListForInsert.ToArray()));*/
    }
private System.Windows.Forms.ToolStripDropDownButton tlsDropDown;
列表工具StripListForInsert=新列表()
{
新ToolStripMenuItem(“擦除”)、新ToolStripMenuItem(“更改”)、新ToolStripMenuItem(“新更改”)
};
对于(int i=0;i<10;i++)
{
tlsDropDown.DropDownItems.Add(新建ToolStripMenuItem(“新建项”),null,新建ToolStripMenuItem(“删除”),新建ToolStripMenuItem(“更改”),新建ToolStripMenuItem(“新建更改”);
//为什么这不起作用——对于所有菜单项——只对最后一项起作用
/*添加(新的ToolStripMenuItem(名称[i],null,ToolStripListForInsert.ToArray())*/
}

正如有人提到的,您不能将同一个ToolStripItem实例添加到多个(子)菜单中

通过为每个父项创建ToolStripItem的新实例,可以使代码正常工作

例如,这应该起作用:

private System.Windows.Forms.ToolStripDropDownButton tlsDropDown;

for (int i = 0; i < 10; i++)
{
    //tlsDropDown.DropDownItems.Add(new ToolStripMenuItem("NewItem", null, new ToolStripMenuItem("Erase"), new ToolStripMenuItem("Change"), new ToolStripMenuItem("NewChange")));

    List<ToolStripMenuItem> ToolStripListForInsert = new List<ToolStripMenuItem>() 
    {
        new ToolStripMenuItem("Erase"), new ToolStripMenuItem("Change"), new ToolStripMenuItem("NewChange")
    };

    tlsDropDown.DropDownItems.Add(new ToolStripMenuItem(names[i], null, ToolStripListForInsert.ToArray()));
}
private System.Windows.Forms.ToolStripDropDownButton tlsDropDown;
对于(int i=0;i<10;i++)
{
//tlsDropDown.DropDownItems.Add(新建ToolStripMenuItem(“新建项”),null,新建ToolStripMenuItem(“删除”),新建ToolStripMenuItem(“更改”),新建ToolStripMenuItem(“新建更改”);
列表工具StripListForInsert=新列表()
{
新ToolStripMenuItem(“擦除”)、新ToolStripMenuItem(“更改”)、新ToolStripMenuItem(“新更改”)
};
添加(新的ToolStripMenuItem(名称[i],null,ToolStripListForInsert.ToArray());
}

此代码看起来有点混乱。试着发一封邮件。和
ToolStirpMenuItem
s一次只能在一个菜单中。不能将菜单项的同一实例同时插入多个菜单。那是因为他们必须了解他们的父母。因此,当您将它们添加到最后一个时,它们将从上一个中删除看起来很可疑。要解决这个问题,您可以为所有菜单创建单独的项,或者尝试将它们动态添加到需要它们的菜单中。@Rene Vogt-现在可能会更清楚了。正如我所说:当您将
ToolStripItem
的实例添加到菜单中时,它将从以前的父菜单中删除。不能将同一实例添加到多个(子)菜单中。