Я пытаюсь создать контекстное меню для элемента управления, связанного с элементом главного меню. Есть два фиксированных пункта меню, которые всегда существуют, и произвольное количество дополнительных пунктов меню, которые могут потребоваться в меню.Каков правильный способ динамического выбора пунктов меню для контекстного меню в WinForms?
Я попытался решить проблему, сохранив ссылку на уровне класса для элементов фиксированного меню и список элементов динамического меню. Я обрабатываю события меню Opening
, очищая текущий список элементов, а затем добавляя в меню соответствующие пункты. Это отлично работает для главного меню, но контекстное меню ведет себя странно.
Основная проблема заключается в том, что к моменту появления Opening
меню уже определило, какие элементы будут отображаться. Эта форма демонстрирует:
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class DemoForm : Form
{
private List _items;
public DemoForm()
{
var contextMenu = new ContextMenuStrip();
contextMenu.Opening += contextMenu_Opening;
_items = new List();
_items.Add(new ToolStripMenuItem("item 1"));
_items.Add(new ToolStripMenuItem("item 2"));
this.ContextMenuStrip = contextMenu;
}
void contextMenu_Opening(object sender, CancelEventArgs e)
{
var menu = sender as ContextMenuStrip;
if (menu != null)
{
foreach (var item in _items)
{
menu.Items.Add(item);
}
}
}
}
}
Когда вы щелкните правой кнопкой мыши форму в первый раз, ничего не отображается. Во второй раз меню отображается, как ожидалось. Есть ли еще какое-то событие, когда я могу обновить элементы? Является ли плохой практикой динамически выбирать пункты меню?
(Примечание: Это пример, который я начал делать для тех, кто хотел такую функциональность, и мне было любопытно, насколько это сложно, поэтому я не могу предоставить подробную информацию о том, почему это может быть сделано. «link» пункт главного меню в контекстное меню, а так как пункты меню могут быть только одним из отдельных меню, это было разумным способом. Любые альтернативные предложения для подхода приветствуются.)
Pun не предназначен. – 2008-09-19 16:38:59