Jak dodać separator do ContextMenu WinForms?

103

Pod moją kontrolą mam:

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

Jak dodać linię separacji do tego ContextMenu?

Adam Pierce
źródło
Jaki jest pożytek ze znaku „&” przed nazwami?
Gerben Limburg
3
@GerbenLimburg: „&” pozwala zaprojektować klawisz skrótu (nazywany „ mnemonikiem ”), który będzie dostępny dla użytkownika (w połączeniu z Alt).
Otiel

Odpowiedzi:

225

Myślę, że to tylko myślnik:

ContextMenu.MenuItems.Add("-");
SqlRyan
źródło
Jest to jeden z wielu słabo udokumentowanych elementów w systemie Windows. Musiałem to zrobić kilka miesięcy temu. Przypomniałem sobie, że mogę to zrobić w Win32, ale nie pamiętałem składni. Skończyło się na tym, że wyciągnąłem stare pliki VC ++ 6, aby je znaleźć. Nawiasem mówiąc, wciąż od czasu do czasu odnoszę się do „Księgi Petzolda”. Wow, czuję się stary ...
Brad Bruce
24
Z pewnością jest to bardziej czytelne, ContextMenu.Items.Add(new ToolStripSeparator()); patrz odpowiedź Gabriela
MarkJ
9
@MarkJ, ContextMenu nie ma już właściwości Items. ToolStripSeperator () również nie jest prawidłowym argumentem dla ContextMenu.Items.Add ().
Cypher,
3
Należy zauważyć, że można to zrobić wizualnie, wprowadzając łącznik w polu wprowadzania „Wpisz tutaj” projektanta menu w projektancie formularzy programu Visual Studio Windows Forms. Separator pojawi się natychmiast w projektancie.
Buggieboy,
48

Działa to tak samo dobrze jak myślnik i podejrzewam, że Winforms przetłumaczy myślnik na ToolStripSeparator. Myślę, że to rozwiązanie jest bardziej oczywiste dla każdego, kto musi utrzymywać kod.

yourContextMenu.Items.Add(new ToolStripSeparator());
Gabriel
źródło
5
Klasa .Net 2 winforms ContextMenu nie ma właściwości Items.
AndrewS,
6
Jest to możliwe tylko w przypadku ContextMenuStrip, a nie w przypadku ContextMenu.
Gerben Limburg
1
I możesz to zrobić yourContextMenu.Items.Insert(3, new ToolStripSeparator());, ale nie możesz Insertdodać myślnika „-”.
Otiel,
1
Idealnie Wielkie dzięki
Garuda Prasad K
11

W WPF:

ContextMenu.MenuItems.Add(new Separator());
al2suarez
źródło
7

Jeśli używasz Projektanta, umieść pojedynczy myślnik „-” jako tekst w taki sam sposób, jak nazwałbyś pozycje menu. Po wciśnięciu Enter zostanie utworzony separator.

Aziz
źródło
3

Ustaw właściwość text na łącznik.

shahkalpesh
źródło
1

Separatory poziome są fajne, ale co jeśli zamiast tego chcesz zamiast tego separator pionowy?

Cóż, nie martw się - możesz go mieć!

Ustaw BarBreakwłaściwość truena, MenuItemktóra powinna być pierwszą po separatorze:

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

wprowadź opis obrazu tutaj

Aby dodać element do MenuItemskolekcji: yourContextMenu.MenuItems.Add(item).

Stephen Kennedy
źródło
0

Być może w późniejszych wersjach programu Visual Studio uprościły to. Używam VS 2012. Możesz dodać separator za pomocą projektanta formularzy. 1) Wybierz / utwórz pasek menu. 2) W "Wpisz tutaj", prawym przyciskiem myszy. 3) Wybierz „Wstaw”. 4) Wybierz „Separator”. 5) Przeciągnij nowy separator do tekstu, który ma się znajdować powyżej. Gotowe.

JimMoore
źródło
0

ContextMenuma konstruktora, który otrzymuje tablicę MenuItemobiektów. Nie trzeba dodawać, że nie możesz dodać ciągu do tej tablicy. Możesz jednak uzyskać separator, dodając new MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
Stephen Kennedy
źródło