Come aggiungere un separatore a un ContextMenu di WinForms?


103

Sotto il mio controllo ho:

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

Come aggiungere una linea di separazione a questo ContextMenu?


Qual è l'uso della "&" davanti ai nomi?
Gerben Limburg

3
@GerbenLimburg: La '&' ti permette di progettare il tasto di scelta rapida (si chiama " mnemonico ") che sarà disponibile per l'utente (combinato con Alt).
Otiel

Risposte:


225

Credo sia solo un trattino:

ContextMenu.MenuItems.Add("-");

Questo è uno dei tanti elementi scarsamente documentati in Windows. Avevo bisogno di farlo alcuni mesi fa. Mi ricordavo che potevo farlo in Win32, ma non riuscivo a ricordare la sintassi. Ho finito per estrarre alcuni vecchi file VC ++ 6 per trovarlo. A proposito, mi riferisco ancora a "The Petzold Book" per alcune cose. Wow, mi sento vecchio ...
Brad Bruce,

24
Sicuramente questo è più leggibile ContextMenu.Items.Add(new ToolStripSeparator()); vedi la risposta di Gabriel
MarkJ

9
@MarkJ, The ContextMenu non ha più una proprietà Items. ToolStripSeperator () non è inoltre un argomento valido per ContextMenu.Items.Add ().
Cypher

3
Nota che puoi farlo visivamente inserendo il trattino nel campo di immissione "Digita qui" della finestra di progettazione menu nella finestra di progettazione Windows Form di Visual Studio. Il separatore apparirà immediatamente nel designer.
Buggieboy

48

Funziona altrettanto bene del trattino e sospetto che Winforms tradurrà il trattino in un ToolStripSeparator. Io per primo penso che questa soluzione sia più ovvia per chiunque debba mantenere il codice.

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

5
La classe ContextMenu di .Net 2 winform non ha una proprietà Items.
AndrewS

6
Questo è possibile solo con ContextMenuStrip e non con ContextMenu.
Gerben Limburg

1
E puoi farlo yourContextMenu.Items.Insert(3, new ToolStripSeparator());, ma non puoi Insertun trattino "-".
Otiel

1
Perfetto Grazie mille
Garuda Prasad K


7

Se stai usando il Designer, inserisci un singolo trattino "-" come testo nello stesso modo in cui chiameresti le voci di menu. Dopo aver premuto Invio, verrà creato il separatore.



1

I separatori orizzontali sono fantastici, ma cosa succede se si desidera invece un separatore verticale?

Beh, non preoccuparti: puoi averne uno!

Imposta la BarBreakproprietà truesu MenuItemche dovrebbe essere la prima dopo il separatore:

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

inserisci qui la descrizione dell'immagine

Per aggiungere l'elemento in una MenuItemscollezione: yourContextMenu.MenuItems.Add(item).


0

Forse nelle versioni successive di Visual Studio l'hanno reso più semplice. Sto usando VS 2012. È possibile aggiungere un separatore tramite la finestra di progettazione dei moduli. 1) Seleziona / Crea una MenuStrip. 2) Su "Digita qui", tasto destro del mouse. 3) Seleziona "Inserisci". 4) Seleziona "Separatore". 5) Trascina il nuovo separatore sul testo che vuoi che sia sopra. Fatto.


0

ContextMenuha un costruttore che riceve un array di MenuItemoggetti. Inutile dire che non puoi aggiungere una stringa a quell'array. Puoi comunque ottenere un separatore aggiungendo un new MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.