Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:

Рис. 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 (Кнопка), то соответствующий пункт Меню будет отображаться только тогда, когда щелчок будет выполнен в рабочей области кнопки.
Проверка состояния элементов меню
Члены типа 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() {
// Наследуемый метод для центрирования формы.
CenterToScreen();
InitializeComponent();
// Установка отметки выбора для элемента меню 'Средний'.
currentCheckedItem = normalToolStripMenuItem;
currentCheckedItem.Checked = true;
}
Теперь вы имеете возможность программно идентифицировать отмеченный в настоящий момент элемент, и последним из необходимых шагов будет обновление обработчика события ContextMenuItemSelection_Clicked(). В нем нужно снять отметку выбора с элемента, выбранного ранее, и отметить новый текущий объект ToolStripMenuItem в соответствии с новым выбором пользователя.
private void ContextMenuItemSelection_Clicked(object sender, EventArgs e) {
// Удаление отметки выбора для элемента.
currentCheckedItem.Checked = false;
…
if (miClicked.Name == "hugeToolStripMenuItem") {
currFontSize = TextFontSize.FontSizeHuge;
currentCheckedItem = hugeToolStripMenuItem;
}
if (miClicked.Name = "normalToolStripMenuItem") {
currFontSize = TextFontSize.FontSizeNormal;
currentCheckedItem = normalToolStripMenuItem;
}
if (miClicked.Name == "tinyToolStripMenuItem") {
currFontSize = TextFontSize.FontSizeTiny;
currentCheckedItem = tinyToolStripMenuItem;
}
// Установка отметки выбора для нового элемента.
currentCheckedItem.Checked = true;
…
}
На рис. 19.15 показан законченный проект MenuStripApp в действии.
Исходный код.Проект MenuStripApp размещен в подкаталоге, соответствующем главе 19.
Читать дальшеИнтервал:
Закладка: