How to add a separator to a WinForms ContextMenu?

Inside my control, I have:

ContextMenu = new ContextMenu();
ContextMenu.MenuItems.Add(new MenuItem("&Add Item", onAddSpeaker));
ContextMenu.MenuItems.Add(new MenuItem("&Edit Item", onEditSpeaker));
ContextMenu.MenuItems.Add(new MenuItem("&Delete Item", onDeleteSpeaker));
ContextMenu.MenuItems.Add( ??? );
ContextMenu.MenuItems.Add(new MenuItem("Cancel"));

How to add a separation line to this ContextMenu?

82684 次浏览

我相信这只是一个破折号:

ContextMenu.MenuItems.Add("-");

If you are using the Designer, place a single hyphen "-" as text the same way you would name your menu items. After hitting enter, the separator will be created.

Set the text property to a hyphen.

In WPF:

ContextMenu.MenuItems.Add(new Separator());

这和破折号一样好用,我怀疑 Winform 会将破折号转换成 ToolStripPartiator。我个人认为,对于任何必须维护代码的人来说,这个解决方案更加明显。

yourContextMenu.Items.Add(new ToolStripSeparator());

也许在 VisualStudio 的后期版本中,他们使这个过程变得更加简单。我用的是 VS 2012。可以通过窗体设计器添加分隔符。 1)选择/创建 MenuStrip。 2)在“ Type Here”上,右鼠标。 3)选择「插入」。 4) Select "Separator". 5)将新的分隔符拖动到你想要它在上面的文本中。 成交。

ContextMenu构造函数,它接收 MenuItem对象的数组。不用说,您不能向该数组添加字符串。然而,你可以通过添加一个 new MenuItem("-")得到一个分隔符:

    var contextMenu = new ContextMenu(new[]
{
timerMenuItem,
keypressMenuItem,
new MenuItem("-"), // Seperator
new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
});

水平分隔符很酷,但是如果你想要一个垂直分隔符呢?

好吧,别担心,你可以拥有一个!

BarBreak属性设置为 MenuItem上的 true,它应该是分隔符之后的第一个属性:

var item = new MenuItem(text: "Settings", onClick: SomeFunction) { BarBreak = true };

enter image description here

将该项添加到 MenuItems集合: yourContextMenu.MenuItems.Add(item)