Як додати роздільник до WinForms ContextMenu?


103

Всередині свого контролю я маю:

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

Відповіді:


225

Я вважаю, що це просто тире:

ContextMenu.MenuItems.Add("-");

Це один із багатьох погано задокументованих елементів у Windows. Мені потрібно було це зробити кілька місяців тому. Я згадав, що я міг це зробити в Win32, але не міг запам'ятати синтаксис. У кінцевому підсумку витягнув кілька старих файлів VC ++ 6, щоб знайти його. До речі, я все ще періодично посилаюся на "Книгу Петцольдів" на деякі речі. Нічого собі, я відчуваю себе старим ...
Бред Брюс

24
Безумовно, це є більш зрозумілим ContextMenu.Items.Add(new ToolStripSeparator()); див . Відповідь Габріеля
MarkJ

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

3
Зауважте, що ви можете це зробити візуально, ввівши дефіс у полі вводу "Введіть тут" дизайнера меню в дизайнері Visual Studio Windows Forms. Розділювач відразу з’явиться у дизайнера.
Buggieboy

48

Це працює так само добре, як тире, і я підозрюю, що Winforms переведе тире в ToolStripSeparator. Я думаю, що це рішення є більш очевидним для тих, хто має підтримувати код.

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

5
Клас. Winets ContextMenu класу .Net 2 не має властивості Item.
AndrewS

6
Це можливо лише з ContextMenuStrip, а не з ContextMenu.
Гербен Лімбург

1
І ти можеш зробити yourContextMenu.Items.Insert(3, new ToolStripSeparator());, але ти не можеш Insert"-".
Отьєль

1
Ідеальний спасибі велике
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.