如何在WinForms ContextMenu中添加分隔符?


103

在我的控制之内,我有:

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"));

如何在此ContextMenu中添加分隔线?


名称前面的“&”有什么用?
Gerben Limburg'7

3
@GerbenLimburg:“&”可让您设计用户可以使用的快捷键(称为“ 助记符 ”)(与Alt结合使用)。
Otiel 2012年

Answers:


225

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

ContextMenu.MenuItems.Add("-");

这是Windows中记录不多的项目之一。几个月前我需要这样做。我记得我可以在Win32中做到这一点,但忘记了语法。我最终找到一些旧的VC ++ 6文件来找到它。顺便说一句,我有时还是会参考“ The Petzold Book”。哇,我感觉老了……
布拉德·布鲁斯

24
当然这是更具可读性ContextMenu.Items.Add(new ToolStripSeparator()); 看到加布里埃尔的答案
MarkJ

9
@ MarkJ,ContextMenu不再具有Items属性。ToolStripSeperator()也不是ContextMenu.Items.Add()的有效参数。
Cypher 2012年

3
请注意,可以通过在Visual Studio Windows窗体设计器的菜单设计器的“在此处键入”输入字段中输入连字符来直观地执行此操作。分隔符将立即显示在设计器中。
Buggieboy

48

这和破折号一样有效,我怀疑Winforms会将破折号转换为ToolStripSeparator。我认为,对于任何需要维护代码的人来说,这种解决方案都是显而易见的。

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

5
.Net 2 winforms ContextMenu类没有Items属性。
AndrewS 2012年

6
这只能通过ContextMenuStrip来实现,而不能通过ContextMenu来实现。
Gerben Limburg

1
并且可以yourContextMenu.Items.Insert(3, new ToolStripSeparator());,但是不能Insert用破折号“-”表示。
Otiel 2014年

1
非常感谢!
鹰航Prasad K,


7

如果使用的是Designer,请以与菜单项命名相同的方式在文本中放置一个连字符“-”。按下回车键后,将创建分隔符。



1

水平分隔符很酷,但是如果要垂直分隔符怎么办?

好吧,不用担心-您可以拥有一个!

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

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

在此处输入图片说明

要将项目添加到MenuItems收藏:yourContextMenu.MenuItems.Add(item)


0

也许在更高版本的Visual Studio中,它们使此过程变得更加简单。我使用的是VS2012。您可以通过表单设计器添加分隔符。1)选择/创建菜单条。2)在“在此处键入”上,单击鼠标右键。3)选择“插入”。4)选择“分隔符”。5)将新的分隔符拖到您希望其上方的文本。做完了


0

ContextMenu一个接收MenuItem对象数组的构造函数。不用说,您不能向该数组添加字符串。但是,您可以通过添加来获取分隔符new MenuItem("-")

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.