Как добавить разделитель в WinForms ContextMenu?


104

Под моим контролем у меня есть:

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

Как добавить разделительную линию в это ContextMenu?


Какая польза от "&" перед именами?
Гербен Лимбург

3
@GerbenLimburg: '&' позволяет создать комбинацию клавиш (она называется « мнемоническая »), которая будет доступна пользователю (в сочетании с Alt).
Otiel

Ответы:


226

Я считаю, что это просто черточка:

ContextMenu.MenuItems.Add("-");

Это один из многих плохо документированных элементов Windows. Мне нужно было сделать это несколько месяцев назад. Я вспомнил, что могу сделать это в Win32, но не мог вспомнить синтаксис. В итоге я нашел несколько старых файлов VC ++ 6. Кстати, я до сих пор иногда по каким-то вопросам обращаюсь к "Книге Петцольда". Вау, я чувствую себя старым ...
Брэд Брюс

25
Конечно, это более читабельно, ContextMenu.Items.Add(new ToolStripSeparator()); см . Ответ Габриэля
MarkJ

9
@MarkJ, ContextMenu больше не имеет свойства Items. ToolStripSeperator () также не является допустимым аргументом для ContextMenu.Items.Add ().
Cypher

3
Обратите внимание, что это можно сделать визуально, введя дефис в поле ввода «Введите здесь» конструктора меню в конструкторе Windows Forms Visual Studio. Разделитель сразу появится в дизайнере.
Buggieboy

Единственный способ использовать в .NET Compact Framework.
Behzad Ebrahimi

49

Это работает так же хорошо, как и тире, и я подозреваю, что Winforms переведет тире в ToolStripSeparator. Я, например, думаю, что это решение более очевидно для всех, кто должен поддерживать код.

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

5
Класс .Net 2 winforms ContextMenu не имеет свойства Items.
AndrewS

6
Это возможно только с ContextMenuStrip, но не с ContextMenu.
Гербен Лимбург

1
И можно yourContextMenu.Items.Insert(3, new ToolStripSeparator());, но нельзя Insertтире "-".
Otiel 07

1
Perfect Большое спасибо
Garuda Prasad K


7

Если вы используете Дизайнер, поместите один дефис «-» в качестве текста так же, как вы бы назвали свои пункты меню. После нажатия Enter будет создан разделитель.



1

Горизонтальные разделители - это круто, но что, если вам нужен вертикальный разделитель?

Что ж, не волнуйтесь - вы можете получить одну!

Установить BarBreakсвойство trueна MenuItemкоторый должен быть первым после разделителя:

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

введите описание изображения здесь

Чтобы добавить элемент в MenuItemsколлекции: yourContextMenu.MenuItems.Add(item).


0

Возможно, в более поздних версиях Visual Studio это стало проще. Я использую VS 2012. Вы можете добавить разделитель через конструктор форм. 1) Выберите / создайте MenuStrip. 2) На «Введите здесь» правой кнопкой мыши. 3) Выберите «Вставить». 4) Выберите «Разделитель». 5) Перетащите новый разделитель к тексту, который вы хотите разместить выше. Готово.


0

ContextMenuимеет конструктор, который получает массив MenuItemобъектов. Излишне говорить, что вы не можете добавить строку в этот массив. Однако вы можете получить разделитель, добавив new MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.