加入上下文菜单

Mat*_*att 5 c# contextmenu winforms

如果我有一个上下文菜单,是否可以将其加入另一个菜单?所以你得到:

  Menu 1 Item 1
  Menu 1 Item 2
  Menu 1 Item N
    ---------
  Menu 2 Item 1
  Menu 2 Item 2
  Menu 2 Item N
Run Code Online (Sandbox Code Playgroud)

我们来看一个类似记事本的程序.菜单中有重复,因为在编辑菜单和编辑控件上下文菜单(剪切,复制,粘贴,全选...)中都会出现一组标准工具.

我想要一个名为的菜单ClipboardTools,它将出现在编辑和控制上下文菜单中,而不需要多次创建项目.当然在这种情况下重复并不是那么糟糕,但我必须处理出现在3-4个不同菜单中的较大菜单,理想情况下不是子菜单.

Maj*_*cRa 5

是.由于每个menuItem都是一个单独的控件,因此可以将相同的menuItem添加到两个菜单中;

  var joinedMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  menu1.Items.Add(joinedMenuItem );
  menu2.Items.Add(joinedMenuItem );
Run Code Online (Sandbox Code Playgroud)

您可以将菜单从一个菜单添加到其他菜单;

  menu1.Items.AddRange(menu2.Items);
Run Code Online (Sandbox Code Playgroud)

现在是时候说:
ToolStripMenu子项是Items属性.
ToolStripMenuItem子项位于DropDownItems属性中.

因此,如果您有两个顶级菜单项(如文件和编辑),并且您想要删除共享子项:

  foreach (var item in topMenuItem2.DropDownItems)
  {
      topMenuItem1.DropDownItems.Remove(item);
  }
Run Code Online (Sandbox Code Playgroud)

在现实生活中,如果想要这样灵活的菜单系统,最可能的是创建菜单项的总列表.也许按类别菜单项的子集.然后,可以将这些列表中的菜单项添加到显示的菜单中.

例如,您可以为用户提供自定义菜单或创建自己的自定义菜单部分的可能性.就像在Visual Studio中完成的那样.