Создание контекстных меню

Создание контекстных меню

Рассмотрим теперь процедуру построения контекстно-зависимых меню (т.е. меню, раскрывающихся по щелчку правой кнопки мыши). Классом, используемым для построения контекстных меню в .NET 1.1. был класс ContextMenu, но в .NET 2.0 предпочтение отдается типу ContextMenuStrip. Подобно типу MenuStrip, тип ContextMenuStrip поддерживает ToolStripItemCollection для представления всех элементов меню (ToolStripMenuItem, ToolStripComboBox, ToolStripSeparator, ToolStripTextBox и т.д.).

Перетащите новый элемент управления ContextMenuStrip из панели инструментов в окно проектирования формы и измените имя этого элемента управления на fontSizeContextStrip с помощью окна свойств. Обратите внимание на то, что теперь дочерние элементы в ContextMenuStrip можно добавлять графически, почти так же, как при редактировании MenuStrip (очень приятное изменение по сравнению с методом, предлагавшимся в Visual Studio .NET 2003). Для нашего примера добавьте три элемента ToolStripMenuItem с названиями Крупный, Средний и Мелкий (рис. 19.14).

Рис. 19.14. Создание ContextMenuStrip

Это контекстное меню предназначено для того, чтобы пользователь мог выбрать размер шрифта для сообщения, отображаемого в области клиента формы. Чтобы упростить себе задачу, создайте тип перечня TextFontSize в рамках пространства имен MenuStripApp и объявите новый член-переменную этого типа в рамках Form (установив для переменной значение TextFontSize.FontSizeNormal).

namespace MainForm {

 // Вспомогательный перечень для размера шрифта.

 enum TextFontSize {

  FontSizeHuge = 30,

  FontSizeNormal = 20,

  FontSizeTiny = 8

 }

 public class MainForm: Form {

  // Текущий размер шрифта.

  private TextFontSize currFontSize = TextFontSize.FontSizeNormal;

  …

 }

}

Следующим шагом является обработка событий Paint формы с помощью окна свойств. Как будет показано в следующей главе, событие Paint позволяет отобразить в клиентской области формы графические данные (включая представленный в соответствующем стиле текст). В данном случае мы должны отобразить текстовое сообщение, используя указанный пользователем размер шрифта. Не беспокоясь пока что о деталях, модифицируйте обработчик события Paint так, как предлагается ниже.

private void MainWindow_Paint(object sender, PaintEventArgs e) {

 Graphics g = e.Graphics;

 g.DrawString("Щелкните здесь правой кнопкой мыши…", new Font("Times New Roman", (float)currFontSize), new SolidBrush(Color.Black), 50, 50);

}

Наконец, нужно обработать события 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 (Кнопка), то соответствующий пункт Меню будет отображаться только тогда, когда щелчок будет выполнен в рабочей области кнопки.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Глава 11 Создание меню автоматического определения компакт-дисков

Из книги Запись CD и DVD: профессиональный подход автора Бахур Виктор

Глава 11 Создание меню автоматического определения компакт-дисков • Автозапуск.• Интерфейс программы AutoPlay Menu Builder.• Элементы управления.• Присвоение команд элементам меню.• Практические


Создание системы меню

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Создание системы меню Создайте новый проект приложения Windows Forms с именем StatusStripApp. Разместите элемент управления MenuStrip в окне проектирования формы и создайте два пункта меню (Файл?Выход и Справка?О программе). После этого задайте обработку событий Click (щелчок) и MouseHover


Меню Файл и создание нового документа

Из книги Photoshop. Мультимедийный курс автора Мединов Олег

Меню Файл и создание нового документа В меню Файл собраны типичные команды для операций над файлами. Вот некоторые из них. МУЛЬТИМЕДИЙНЫЙ КУРС На прилагаемом компакт-диске есть глава «Текстовые меню», содержащая несколько видеолекций, посвященных меню программы Photoshop. •


7.2. Создание титров, меню, эффектов, закадровых комментариев

Из книги Nero 8 автора Кашеваров А

7.2. Создание титров, меню, эффектов, закадровых комментариев Сначала нужно создать вступление и завершение фильма, пользуясь видеоэффектами редактора.1. В окне Asset View (Вид активов) щелкните кнопкой мыши на вкладке Display Transitions (Показать перемещения) и просмотрите список


Инструмент Создание и редактирование меню видеодиска

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Инструмент Создание и редактирование меню видеодиска Основным средством работы с готовым меню после добавления его в проект является инструмент Создание и редактирование меню видеодиска видеоинструментария. Окно, открывающееся при выборе этого инструмента, в тот


Создание нескольких меню

Из книги FB2-Librarian (Библиотекарь) Руководство автора Пустовит Дмитрий

Создание нескольких меню Pinnacle Studio Plus поддерживает создание нескольких меню в одном проекте. Это дает возможность создавать иерархическое меню, на примере которого мы и рассмотрим работу с проектами, содержащими несколько DVD-меню. Особенным в создании иерархического


11 Создание пользовательского меню

Из книги Программирование КПК и смартфонов на .NET Compact Framework автора Климов Александр П.

11 Создание пользовательского меню Эти пункты меню будут активны при нажатии правой кнопки мыши на выбранном произведении.Зайдите в пункт меню «Инструменты» > «Опции».В открывшемнся окне «Настройки» на закладке «Общее» нажмите кнопку «Пользовательское меню».


Создание меню

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

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


24.4. Создание меню

Из книги Реестр Windows 7 автора Климов Александр Петрович

24.4. Создание меню Если вам нужно стандартное меню приложения, состоящее из пунктов Файл, Правка, Вид и т.п., используйте виджит Окно приложения Gnome (рис. 24.9) — вы его найдете на страничке виджитов Gnome. Рис. 24.9. Окно приложения GnomeЭто уже готовый шаблон окна с меню, панелью


Создание собственных команд для контекстного меню Проводника и Рабочего стола

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Создание собственных команд для контекстного меню Проводника и Рабочего стола Мы знаем, как удалять или редактировать некоторые команды из контекстного меню Проводника и Рабочего стола. Настало время научиться создавать свои собственные команды. Информация о


Пример 10-25. Создание меню с помощью case

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Пример 10-25. Создание меню с помощью case #!/bin/bash# Грубый пример базы данныхclear # Очистка экранаecho " Список"echo " ------"echo "Выберите интересующую Вас персону:"echoecho "[E]vans, Roland"echo "[J]ones, Mildred"echo "[S]mith, Julie"echo "[Z]ane, Morris"echoread personcase "$person" in# Обратите внимание: переменная взята в кавычки.


Создание ярлыка файл в меню Пуск

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Создание ярлыка файл в меню Пуск Это еще одна возможность, которой можно воспользоваться благодаря INF-файлу. С помощью ключевого слова ProfileItems можно определить блок INF файла, в котором описывается создаваемый в меню Пуск ярлык. Рассмотрим пример, с помощью которого


4.6. Отображение контекстных меню в ячейках табличных видов

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

4.6. Отображение контекстных меню в ячейках табличных видов Постановка задачи Необходимо дать пользователям возможность применять операции копирования и вставки. Предполагается, что при этом пользователь будет удерживать пальцем определенную ячейку таблицы на экране


5.9. Представление контекстных меню в ячейках сборных видов

Из книги автора

5.9. Представление контекстных меню в ячейках сборных видов Постановка задачи Если пользователь нажимает на один из экранных элементов в вашем сборном виде и удерживает на нем палец, требуется вывести контекстное меню. С помощью команд из этого меню элемент можно будет