Adam Pierce
Adam Pierce

Reputation: 34365

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?

Upvotes: 115

Views: 89077

Answers (8)

Stephen Kennedy
Stephen Kennedy

Reputation: 21558

Horizontal separators are cool, but what if you want a vertical separator instead?

Well, worry ye not - you can have one!

Set BarBreak property to true on the MenuItem which should be the first one after the seperator:

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

enter image description here

To add the item to a MenuItems collection: yourContextMenu.MenuItems.Add(item).

Upvotes: 3

Stephen Kennedy
Stephen Kennedy

Reputation: 21558

ContextMenu has a constructor which receives an array of MenuItem objects. Needless to say, you can't add a string to that array. You can however get a seperator by adding a new MenuItem("-"):

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

Upvotes: 0

JimMoore
JimMoore

Reputation: 31

Perhaps in later versions of Visual Studio they made this simpler. I'm using VS 2012. You can add a separator via the forms designer. 1) Select/Create a MenuStrip. 2) On "Type Here", right mouse. 3) Select "Insert". 4) Select "Separator". 5) Drag the new separator to the text you want it to be above. Done.

Upvotes: 1

Aziz
Aziz

Reputation: 20715

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.

Upvotes: 7

Gabriel
Gabriel

Reputation: 655

This works just as well as the dash, and i suspect the Winforms will translate the dash to a ToolStripSeparator. I for one think this solution is more obvious for anyone who has to maintain the code.

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

Upvotes: 63

al2suarez
al2suarez

Reputation: 129

In WPF:

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

Upvotes: 11

shahkalpesh
shahkalpesh

Reputation: 33474

Set the text property to a hyphen.

Upvotes: 3

SqlRyan
SqlRyan

Reputation: 33914

I believe it's just a dash:

ContextMenu.MenuItems.Add("-");

Upvotes: 245

Related Questions