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?


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

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

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


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.



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).


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.


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())
    });
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.