我可以在.NET Windows窗体中创建多列上下文菜单吗?

时间:2012-01-12 10:00:16

标签: .net winforms contextmenu

我想创建一个包含多个列的上下文菜单。基本上它会是这样的:

First item  | [common option] | All Options >
Second item | [common option] | All Options >
Third item  | [common option] | All Options >
Fourth item | [common option] | All Options >

所以基本上有一堆项目(在运行时生成),每个项目都可以自己启动;或使用常用选项;或者你可以获得一个包含所有可能选项的子菜单。

我该怎么做?我试图滥用ContextMenuStripContextMenu,但他们似乎没有任何此类选项。我似乎还记得在某处看过多列菜单......

我更喜欢Windows Forms解决方案,因为我没有任何WPF体验。哦,当点击通知区域(又名系统托盘)中的图标时,将打开此上下文菜单。

2 个答案:

答案 0 :(得分:5)

我不知道ContextMenuStrip,这是一个完全用.NET代码构建的菜单,但你绝对可以用ContextMenu来做,这是本机系统菜单的包装。 / p>

关键是为各个菜单项设置MFT_MENUBREAKMFT_MENUBARBREAK标志,这些标志在MenuItem class包装器中显示为属性:MenuItem.Break和{分别为{3}}。

前者只是将菜单项放在一个新列中,而后者将该项放入一个新列中,并将该列与蚀刻的垂直线分开。

来自MSDN示例:

public void CreateMyMenus()
{
    // Create three top-level menu items.
    MenuItem menuItem1 = new MenuItem("&File");
    MenuItem menuItem2 = new MenuItem("&New");
    MenuItem menuItem3 = new MenuItem("&Open");

    // Set the BarBreak property to display horizontally.
    menuItem2.BarBreak = true;
    menuItem3.BarBreak = true;

    // Add menuItem2 and menuItem3 to the menuItem1's list of menu items.
    menuItem1.MenuItems.Add(menuItem2);
    menuItem1.MenuItems.Add(menuItem3);
}

答案 1 :(得分:0)

WinForms中的菜单只能像树一样构建:每个项目下都可以有一个子菜单。因此,您可以将公共选项作为子菜单的第一项。

除非你设计自己的控件(然后WPF更适合这个任务,但WPF需要花费大量时间来学习),它看起来不会有任何不同。