Наконец, нужно обработать события Click для каждого из типов ToolStripMenuItem, поддерживаемых элементом ContextMenuStrip. При этом можно, конечно, иметь отдельный обработчик событий Click для каждого из типов, но мы укажем один обработчик событий, который будет вызываться при щелчке на любом из трех элементов ToolStripMenuItem. Используя окно свойств, укажите для обработчика событий Click имя ContextMenuItemSelection_Ciicked для всех трех типов ToolStripMenuItem и реализуйте соответствующий метод так, как показано ниже.
private void ContextMenuItemSelection_Clicked(object sender, EventArgs e) {
// Получение элемента ToolStripMenuItem,
// на котором выполнен щелчок.
ToolStripMenuItem miClicked = (ToolStripMenuItem)sender;
// Поиск элемента, на которой выполнен щелчок, по его имени.
if (miClicked.Name == "hugeToolStripMenuItem") currFontSize = TextFontSize.FontSizeHuge;
if (miClicked.Name == "normalToolStripMenuItem") currFontSize = TextFontSize.FontSizeNormal;
if (miClicked.Name == "tinyToolStripMenuItem") currFontSize = TextFontSize.FontSizeTiny;
// Указание форме обновить представление.
Invalidate;
}
Обратите внимание на то, что использование аргумента sender позволяет определить имя члена-переменной ToolStripMenuItem, чтобы установить размер текста. После этого вызов Invalidate генерирует событие Paint, которое вызовет ваш обработчик события Paint.
Заключительным шагом является информирование формы о том, какой элемент ContextMenuStrip должен отображаться при щелчке правой кнопки мыши в области клиента. Для этого с помощью окна свойств установите значение свойства ContextMenuStrip равным имени элемента контекстного меню. После этого в контексте InitializeComponent появится следующая строка.
this.ContextMenuStrip = this.fontSizeContextStrip;
Если выполнить приложение теперь, вы сможете изменить размер отображаемого текстового сообщения по щелчку правой кнопки мыши.
Замечание. С помощью свойства Context MenuStrip в контекстное меню можно включить любой элемент управления. Например, если в диалоговом окне контекстного меню создать объект Button (Кнопка), то соответствующий пункт Меню будет отображаться только тогда, когда щелчок будет выполнен в рабочей области кнопки.
Проверка состояния элементов меню
Члены типа ToolStripMenuItem позволяют проверить состояние элемента меню, сделать его доступным или скрытым. В табл. 19.11 даются описания некоторых из наиболее интересных свойств этого типа.
Таблица 19.11. Члены типа ToolStripMenuItem
Член | Описание |
---|---|
Checked | Получает или устанавливает значение, являющееся индикатором наличия отметки выбора в строке с текстом данного ToolStripMenuItem |
CheckOnClick | Получает или устанавливает значение, являющееся индикатором необходимости появления отметки выбора для данного ToolStripMenuItem при щелчке |
Enabled | Получает или устанавливает значение, являющееся индикатором доступности данного ToolStripMenuItem |
Давайте расширим ваше контекстное меню так, чтобы в нем рядом с выбранным в настоящий момент пунктом меню отображалась отметка выбора. Установить отметку для данного элемента меню очень просто (для этого нужно установить значение свойства Checked равным true). Однако для того, чтобы проследить, какой пункт меню должен быть отмечен, потребуется дополнительная программная логика. Одним из возможных подходов здесь является определение специальной переменной ToolStripMenuItem, которая будет представлять элемент, отмеченный в настоящий момент.
public class MainWindow: Form {
…
// Указывает отмеченный элемент.
private ToolStripMenuItem currentCheckedItem;
}
Напомним, что размером текста по умолчанию является TextFontSize.FontSizeNormal. С учетом этого начальным отмеченным элементам в ToolStripMenuItem должен быть normalToolStripMenuItem. Измените конструктор формы так, как показано ниже.
public MainWindow {