Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2_Меню и панели управления.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

1.4. События управляющего элемента Menultem

На первый взгляд, вероятно, что вполне достаточно одного — события click. На самом деле, существует пять событий, на которые может управляющий элемент Menultem реагировать. Причем, два из них следует использовать только в тех случаях, когда вы формируете пункты самостоятельно. В таблице 2 даны описания этих событий.

Таблица 2.

Имя

Описание

Click

Наступает, когда пользователь щелкает мышью на пункте меню. Это событие можно также сгенерировать искусственно, обратившись к методу PerformClickO, имеющемуся в Menuitem.

DrawItem

Возникает, когда пункт меню должен быть выведен. Если свойству OwnerDraw присвоено значение t r u e , то это событие необходимо обрабатывать.

MesureItem

Возникает перед тем, как Menuitem начинает рисоваться. Если вы рисуете Menuitem самостоятельно, то вам необходимо вычислить и вернуть ширину и высоту пункта, вызвавшего наступление события.

Popup

Возникает в момент вывода списка подпунктов данного Menuitem. Это событие может использоваться для проверки доступности пунктов меню и соответствующего задания их состояния.

Select

Наступает, когда пользователь перемещает курсор мыши на данный пункт или когда он перемещает фокус с помощью клавиатуры.

1.5. Контекстное меню (ContextMenu).

Контекстное меню — это меню, которое открывается, когда пользователь щелкает правой кнопкой мыши на каком-либо объекте, расположенном в форме. Контекстное меню, изображенное на рисунке слева, представляет собой меню, которое автор получил, щелкнув правой кнопкой мыши на рабочем столе своего компьютера. Создать контекстное меню можно посредством переноса такого меню в форму и добавления к нему необходимых пунктов — точно так же, как это может быть сделано с управляющим элементом MainMenu. Единственное отличие заключается в том, что в контекстном меню не допускается наличие пунктов самого верхнего уровня.

Рис.6. Возможные действия при создании контекстного меню.

Для того чтобы привязать контекстное меню к какому-либо управляющему элементу в форме, следует выбрать соответствующий управляющий элемент и присвоить его свойству contextMenu указатель на созданное вами контекстное меню.

В результате этих действий главное окно Visual Studio примет вид, показанный на Рис.7.

Рис.7. Результат действий по созданию контекстного меню.

1.6. Создание контекстного меню в режиме проектирования

Контекстное меню, дублирующее некоторые действия основного меню, является самым привычным для пользователя, но не самым быстрым способом работы с программой. Например, элемент управления RichTextBox, размещенный на форме, может содержать в себе простейшее контекстное меню, дублирующее действия подменю Edit. Для того чтобы убедиться в этом, достаточно разместить этот элемент управления на форму и запустить приложение (Рис.8):

Рис.8.  Контекстное меню элемента TextBox

Добавим к нему элемент контекстного меню contextMenu из окна панели инструментов (ToolBox) на форму, которую назовем "blank". Пункты контекстного меню добавляем точно так же, как мы это делали для главного меню (Рис.4 и 5):

Рис.9.  Пункты контекстного меню

Свойство Text и Shortcut пунктов контекстного меню оставляем оставим такими же, как и в главном меню. Если мы установим затем для свойства ShowShortcut значение false, то указанные Вами сочетания клавиш будут работать, но в самом меню отображаться не будут (как на Рис.9). Свойство Name будет формироваться следующим образом: для пункта Cut — "cmnuCut", для Сopy — "cmnuCopy" и т.д.

В обработчике пунктов просто вызываем соответствующие методы:

private void cmnuCut_Click(object sender, System.EventArgs e){ Cut(); }

private void cmnuCopy_Click(object sender, System.EventArgs e){ Copy(); }

private void cmnuPaste_Click(object sender, System.EventArgs e){ Paste(); }

private void cmnuDelete_Click(object sender, System.EventArgs e){ Delete(); }

private void cmnuSelectAll_Click(object sender, System.EventArgs e){ SelectAll(); }

Реализация указанных функций может быть реализована в классе формы следующим образом:

// Вырезание текста

public void Cut()

{

this.BufferText = richTextBox1.SelectedText;

richTextBox1.SelectedText = "";

}

// Копирование текста

public void Copy()

{

this.BufferText = richTextBox1.SelectedText;

}

// Вставка

public void Paste()

{

richTextBox1.SelectedText = this.BufferText;

}

// Выделение всего текста — используем свойство SelectAll элемента управления RichTextBox

public void SelectAll()

{

richTextBox1.SelectAll();

}

// Удаление

public void Delete()

{

richTextBox1.SelectedText = "";

this.BufferText = "";

}

Последнее, что нам осталось сделать, — это определить, где будет появляться контекстное меню. Элемент RichTextBox имеет свойство ContextMenu, где мы и указываем contextMenu1, поскольку нам нужно отображать меню именно в текстовом поле. Запускаем приложение — теперь в любой точке текста доступно меню (Рис. 2.10).

Рис. 10.  Контекстное меню