¿Cómo agregar un separador a un ContextMenu de WinForms?

103

Dentro de mi control, tengo:

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

¿Cómo agregar una línea de separación a este ContextMenu?

Adam Pierce
fuente
¿Cuál es el uso de '&' delante de los nombres?
Gerben Limburg
3
@GerbenLimburg: El '&' le permite diseñar la tecla de método abreviado (se llama " mnemónico ") que estará disponible para el usuario (combinada con Alt).
Otiel

Respuestas:

225

Creo que es solo un guión:

ContextMenu.MenuItems.Add("-");
SqlRyan
fuente
Este es uno de los muchos elementos mal documentados en Windows. Necesitaba hacer esto hace unos meses. Recordé que podía hacerlo en Win32, pero no recordaba la sintaxis. Terminé sacando algunos archivos antiguos de VC ++ 6 para encontrarlo. Por cierto, todavía me refiero ocasionalmente a "El libro de Petzold" para algunas cosas. Wow, me siento viejo ...
Brad Bruce
24
Seguramente esto es más legible ContextMenu.Items.Add(new ToolStripSeparator()); vea la respuesta de Gabriel
MarkJ
9
@MarkJ, el ContextMenu ya no tiene una propiedad Items. ToolStripSeperator () tampoco es un argumento válido para ContextMenu.Items.Add ().
Cypher
3
Tenga en cuenta que puede hacer esto visualmente ingresando el guión en el campo de entrada "Escriba aquí" del diseñador de menús en el diseñador de formularios Windows Forms de Visual Studio. El separador aparecerá inmediatamente en el diseñador.
Buggieboy
48

Esto funciona tan bien como el guión, y sospecho que Winforms traducirá el guión a un ToolStripSeparator. Por mi parte, creo que esta solución es más obvia para cualquiera que tenga que mantener el código.

yourContextMenu.Items.Add(new ToolStripSeparator());
Gabriel
fuente
5
La clase ContextMenu de winforms de .Net 2 no tiene una propiedad Items.
AndrewS
6
Esto solo es posible con un ContextMenuStrip y no con un ContextMenu.
Gerben Limburg
1
Y puede hacerlo yourContextMenu.Items.Insert(3, new ToolStripSeparator());, pero no Insertun guión "-".
Otiel
1
Perfecto muchas gracias
Garuda Prasad K
11

En WPF:

ContextMenu.MenuItems.Add(new Separator());
al2suarez
fuente
7

Si está utilizando Designer, coloque un solo guión "-" como texto de la misma manera que nombraría los elementos de su menú. Después de presionar enter, se creará el separador.

Aziz
fuente
3

Establezca la propiedad de texto en un guión.

Shahkalpesh
fuente
1

Los separadores horizontales son geniales, pero ¿qué pasa si quieres un separador vertical?

Bueno, no te preocupes, ¡puedes tener uno!

Establezca la BarBreakpropiedad trueen MenuItemcuál debería ser la primera después del separador:

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

ingrese la descripción de la imagen aquí

Para agregar el elemento a una MenuItemscolección: yourContextMenu.MenuItems.Add(item).

Stephen Kennedy
fuente
0

Quizás en versiones posteriores de Visual Studio lo simplificaron. Estoy usando VS 2012. Puede agregar un separador a través del diseñador de formularios. 1) Seleccione / Cree una barra de menú. 2) En "Escriba aquí", mouse derecho. 3) Seleccione "Insertar". 4) Seleccione "Separador". 5) Arrastre el nuevo separador al texto que desea que esté arriba. Hecho.

JimMoore
fuente
0

ContextMenutiene un constructor que recibe una matriz de MenuItemobjetos. No hace falta decir que no puede agregar una cadena a esa matriz. Sin embargo, puede obtener un separador agregando un new MenuItem("-"):

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