Урок 23. Как отобразить одно контекстное для нескольких элементов управления?

Для отображениения одного контекстного меню для различных элементов управления на форме не надо для каждого из них писать свой обработчик для щелчка мыши - достаточно написать один обработчик на все элементы управления. Кроме того (и это достаточно очевидный шаг) надо для каждого элемента управления установить свойство ContextMenu равным имени нашего контекстного меню.

Приведем конкретный пример.

Создайте обычное Windows-приложение. Добавьте на форрму несколько элементов управления. Пусть это для определенности будут label, textbox и кнопка. Кроме того, добавьте на форму элемент управления ContextMenu, к которому добавьте парочку пунктов - Item 1 и Item 2. При желании можно добавить и обработчики для данных пунктов меню.

В обработчик для загрузки формы добавьте следующий код:

private void Form1_Load(object sender, System.EventArgs e)

{

// Для каждого элемента управления

foreach (Control c in Controls)

{

// задаем контекстное меню.

c.ContextMenu = contextMenu1;

// Указываем для каждого элемента

// обработчик для правой кнопки мыши.

c.MouseDown +=

new MouseEventHandler(this.ShowPopupMenu);

}

}

Смысл кода достаточно ясен из комментариев - перебираем все элементы управления на форме и для каждого задаем контекстное меню и обработчик для правой кнопки мыши.

Остается добавить сам обработчик для нажатия кнопки мыши. Вот его код:

private void ShowPopupMenu(object sender,

System.Windows.Forms.MouseEventArgs e)

{

// Если нажата правая кнопка мыши.

if(e.Button == MouseButtons.Right)

{

Control c = (Control)sender;

// Если контекстное меню у элемента существует,

if(c.ContextMenu!= null)

{

// то показываем его.

c.ContextMenu.Show(c, new Point(e.X, e.Y));

}

}

}

Обратите внимание, что обработчик мы назвали ShowPopupMenu - точно также, как имя метода, заданного при загрузке формы:

...

c.MouseDown += new MouseEventHandler(this.ShowPopupMenu);

...

Компилируем и запускаем программу. Получаем ожидаемый нами результат:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: