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
的实例添加到菜单中时,它将从以前的父菜单中删除。不能将同一实例添加到多个(子)菜单中。