Comment ajouter un séparateur à un menu contextuel WinForms?

104

Sous mon contrôle, j'ai:

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

Comment ajouter une ligne de séparation à ce ContextMenu?

Adam Pierce
la source
Quelle est l'utilité du «&» devant les noms?
Gerben Limburg
3
@GerbenLimburg: Le '&' vous permet de concevoir la touche de raccourci (elle est appelée " mnémonique ") qui sera disponible pour l'utilisateur (combinée avec Alt).
Otiel

Réponses:

226

Je crois que c'est juste un tiret:

ContextMenu.MenuItems.Add("-");
SqlRyan
la source
C'est l'un des nombreux éléments mal documentés de Windows. J'avais besoin de le faire il y a quelques mois. Je me suis souvenu que je pouvais le faire avec Win32, mais je ne me souvenais pas de la syntaxe. J'ai fini par extraire de vieux fichiers VC ++ 6 pour le trouver. D'ailleurs, je me réfère encore occasionnellement au "Livre Petzold" pour certaines choses. Wow, je me sens vieux ...
Brad Bruce
25
C'est sûrement plus lisible, ContextMenu.Items.Add(new ToolStripSeparator()); voir la réponse de Gabriel
MarkJ
9
@MarkJ, Le ContextMenu n'a plus de propriété Items. ToolStripSeperator () n'est pas non plus un argument valide pour ContextMenu.Items.Add ().
Cypher
3
Notez que vous pouvez le faire visuellement en entrant le trait d'union dans le champ de saisie «Tapez ici» du concepteur de menu dans le concepteur Windows Forms de Visual Studio. Le séparateur apparaîtra immédiatement dans le concepteur.
Buggieboy
La seule façon d'utiliser dans .NET Compact Framework.
Behzad Ebrahimi il y a
49

Cela fonctionne aussi bien que le tableau de bord, et je soupçonne que Winforms traduira le tiret en ToolStripSeparator. Pour ma part, je pense que cette solution est plus évidente pour quiconque doit maintenir le code.

yourContextMenu.Items.Add(new ToolStripSeparator());
Gabriel
la source
5
La classe .Net 2 winforms ContextMenu n'a pas de propriété Items.
AndrewS
6
Cela n'est possible qu'avec un ContextMenuStrip et non avec un ContextMenu.
Gerben Limburg
1
Et vous pouvez le faire yourContextMenu.Items.Insert(3, new ToolStripSeparator());, mais vous ne pouvez pas Insertun tiret "-".
Otiel
1
Merci beaucoup
Garuda Prasad K
11

Dans WPF:

ContextMenu.MenuItems.Add(new Separator());
al2suarez
la source
7

Si vous utilisez le Designer, placez un seul tiret "-" comme texte de la même manière que vous nommeriez vos éléments de menu. Après avoir appuyé sur Entrée, le séparateur sera créé.

Aziz
la source
3

Définissez la propriété text sur un trait d'union.

shahkalpesh
la source
1

Les séparateurs horizontaux sont cool, mais que faire si vous voulez plutôt un séparateur vertical?

Eh bien, ne vous inquiétez pas - vous pouvez en avoir un!

Définissez la BarBreakpropriété truesur le MenuItemqui devrait être le premier après le séparateur:

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

entrez la description de l'image ici

Pour ajouter l'article à une MenuItemscollection: yourContextMenu.MenuItems.Add(item).

Stephen Kennedy
la source
0

Peut-être que dans les versions ultérieures de Visual Studio, ils ont rendu cela plus simple. J'utilise VS 2012. Vous pouvez ajouter un séparateur via le concepteur de formulaires. 1) Sélectionnez / Créez un MenuStrip. 2) Sur "Tapez ici", avec le bouton droit de la souris. 3) Sélectionnez "Insérer". 4) Sélectionnez "Séparateur". 5) Faites glisser le nouveau séparateur vers le texte que vous souhaitez qu'il soit au-dessus. Terminé.

JimMoore
la source
0

ContextMenua un constructeur qui reçoit un tableau d' MenuItemobjets. Inutile de dire que vous ne pouvez pas ajouter de chaîne à ce tableau. Vous pouvez cependant obtenir un séparateur en ajoutant un new MenuItem("-"):

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