Como adicionar um separador a um ContextMenu WinForms?


103

Dentro do meu controle, tenho:

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

Como adicionar uma linha de separação a este ContextMenu?


Qual é o uso do '&' na frente dos nomes?
Gerben Limburg

3
@GerbenLimburg: O '&' permite que você crie a tecla de atalho (é chamada de " mnemônica ") que estará disponível para o usuário (combinada com Alt).
Otiel

Respostas:


225

Acredito que seja apenas um traço:

ContextMenu.MenuItems.Add("-");

Este é um dos muitos itens mal documentados no Windows. Eu precisava fazer isso há alguns meses. Lembrei-me de que poderia fazer isso no Win32, mas não conseguia lembrar a sintaxe. Acabei puxando alguns arquivos VC ++ 6 antigos para encontrá-lo. A propósito, eu ainda ocasionalmente me refiro ao "Livro Petzold" para algumas coisas. Uau, estou me sentindo velho ...
Brad Bruce

24
Certamente isso é mais legível, ContextMenu.Items.Add(new ToolStripSeparator()); veja a resposta de Gabriel
MarkJ

9
@MarkJ, The ContextMenu não tem mais uma propriedade Items. ToolStripSeperator () também não é um argumento válido para ContextMenu.Items.Add ().
Cypher

3
Observe que você pode fazer isso visualmente inserindo o hífen no campo de entrada "Digite aqui" do designer de menu no designer de Formulários do Windows do Visual Studio. O separador aparecerá imediatamente no designer.
Buggieboy de

48

Isso funciona tão bem quanto o traço, e suspeito que o WinForms traduzirá o traço em um ToolStripSeparator. Eu, pelo menos, acho que essa solução é mais óbvia para quem precisa manter o código.

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

5
A classe ContextMenu .Net 2 winforms não tem uma propriedade Items.
AndrewS

6
Isso só é possível com um ContextMenuStrip e não com um ContextMenu.
Gerben Limburg

1
E você pode fazer yourContextMenu.Items.Insert(3, new ToolStripSeparator());, mas você não pode Insertum traço "-".
Otiel,

1
Perfeito, muito obrigado
Garuda Prasad K


7

Se você estiver usando o Designer, coloque um único hífen "-" como texto da mesma maneira que você nomearia seus itens de menu. Após pressionar Enter, o separador será criado.



1

Separadores horizontais são legais, mas e se você quiser um separador vertical?

Bem, não se preocupe - você pode ter um!

Defina a BarBreakpropriedade como trueno MenuItemqual deve ser o primeiro após o separador:

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

insira a descrição da imagem aqui

Para adicionar o item a uma MenuItemscoleção: yourContextMenu.MenuItems.Add(item).


0

Talvez em versões posteriores do Visual Studio eles tenham tornado isso mais simples. Estou usando o VS 2012. Você pode adicionar um separador por meio do designer de formulários. 1) Selecione / crie um MenuStrip. 2) Em "Digite Aqui", clique com o botão direito do mouse. 3) Selecione "Inserir". 4) Selecione "Separador". 5) Arraste o novo separador até o texto que você deseja que fique acima. Feito.


0

ContextMenutem um construtor que recebe uma matriz de MenuItemobjetos. Desnecessário dizer que você não pode adicionar uma string a esse array. No entanto, você pode obter um separador adicionando um new MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.