Чтение онлайн

ЖАНРЫ

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

 …

 // Для обработки события MouseUp.

 MouseUp += new MouseHandler(MainForm_MouseUp);

}

Следующий обработчик события MouseUp сообщает в окне сообщения о том, какой кнопкой мыши был выполнен щелчок.

public void MainForm_MouseUp(object sender, MouseEventArgs e) {

 // Какая кнопка мыши была нажата?

 if (e.Button == MouseButtons.Left) MessageBox.Show("Щелчок левой кнопки");

 if (e.Button == MouseButtons.Right) MessageBox.Show("Щелчок правой кнопки");

 if (e.Button == MouseButtons.Middle) MessageBox.Show("Щелчок средней кнопки");

}

Ответ

на события клавиатуры

Обработка ввода с клавиатуры почти идентична обработке событий мыши. cобытия KeyUp и KeyDown работают в паре с делегатом KeyEventHandler, который может указывать на любой метод, получающий объект общего вида в качестве первого параметра, и KeyEventArgs – в качестве второго.

void MyKeyboardHandler(object sender, KeyEventArgs e);

Описания членов KeyEventArgs предлагаются в табл. 19.7.

Таблица 19.7. Свойства типа KeyEventArgs

Свойство Описание
Alt Содержит значение, являющееся индикатором нажатия клавиши ‹Alt›
Control Содержит значение, являющееся индикатором нажатия клавиши ‹Ctrl›
Handled Читает или устанавливает значение, являющееся индикатором полного завершения обработки события обработчиком
KeyCode Возвращает клавишный код для события KeyDown или события KeyUp
Modifiers Указывает, какие модифицирующие клавиши были нажаты (‹Ctrl›, ‹Shift› и/или ‹Alt›)
Shift Содержит значение, являющееся индикатором нажатия клавиши ‹Shift›

Измените объект MainForm, чтобы реализовать обработку события KeyUp. В окне сообщения отобразите название нажатой клавиши, используя свойство KeyCode.

public class MainForm: Form {

 public MainForm {

// Для отслеживания событий KeyUp.

KeyUp += new KeyEventHandler(MainForm_KeyUp);

 }

 private void MainForm_KeyUp (object sender, KeyEventArgs e) {

MessageBox.Show(e.KeyCode.ToString, "Нажата клавиша!");

 }

}

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

На этом мы завершим обсуждение функциональных возможностей базового класса Control и перейдем к обсуждению роли Form.

Исходный код. Проект ControlBehaviors размещен в подкаталоге, соответствующем главе 19.

Функциональные возможности класса Form

Класс Form обычно (но не обязательно) является непосредственным базовым классом для пользовательских типов Form. В дополнение к большому набору членов, унаследованных от классов Control, ScrollableControl и ContainerControl, тип Form предлагает свои собственные функциональные возможности, в частности для главных окон, дочерних окон MDI и диалоговых окон. Давайте сначала рассмотрим базовые свойства, представленные в табл. 19.8.

Таблица 19.8. Свойства типа Form

Свойства Описание
AcceptButton Читает или устанавливает информацию о кнопке, которая будет "нажата" (в форме), когда пользователь нажмет клавишу ‹Enter›
ActiveMDIChild IsMDIChild IsMDIContainer Используются в контексте МDI-приложения
CancelButton Читает или устанавливает информацию о кнопочном элементе управления, который будет "нажат", когда пользователь нажмет клавишу ‹Esc›
ControlBox Читает или устанавливает значение, являющееся индикатором наличия у формы экранной кнопки управления окном
FormBorderStyle Читает
или устанавливает значение, задающее стиль границы формы (в соответствии с перечнем FormBorderStyle)
Menu Читает или устанавливает информацию о стыковке меню в форме
MaximizeBox MinimizeBox Используются для информации о наличии у формы кнопок минимизации и максимизации окна
ShowInTaskbar Указывает, будет ли форма видимой в панели задач Windows
StartPosition Читает или устанавливает значение, задающее начальную позицию окна формы (в соответствии с перечнем FormStartPosition)
WindowState Указывает (в соответствии с перечнем FormWindowState), в каком виде должна отображаться форма при запуске

В дополнение к ожидаемым обработчикам событий с префиксом On, предлагаемым по умолчанию, в табл. 19.9 предлагается список некоторых базовых методов, определенных типом Form.

Таблица 19.9. Основные методы типа Form

Метод Описание
Activate Активизирует форму и предоставляет ей фокус ввода
Close Закрывает форму
CenterToScreen Размещает форму в центре экрана
LayoutMDI Размещает все дочерние формы (в соответствии с перечнем LayoutMDI) в рамках родительской формы
ShowDialog Отображает форму в виде модального диалогового окна. Более подробно о программировании диалоговых окон говорится в главе 21

Наконец, класс Form определяет ряд событий, связанных с циклом существования формы. Основные такие события описаны в табл. 19.10.

Таблица 19.10. Подборка событий типа Form

События Описание
Activated Происходит при активизации формы, т.е. при получении формой фокуса ввода
Closed, Closing Используются для проверки того, что форма закрывается или уже закрыта
Deactivate Происходит при деактивизации формы, те. когда форма утрачивает текущий фокус ввода
Load Происходит после того, как форма размещается в памяти, но пока остается невидимой на экране
MDIChildActive Генерируется при активизации дочернего окна

Цикл существования типа Form

Если вы имеете опыт программирования интерфейсов пользователя с помощью таких пакетов разработки, как Java Swing, Mac OS X Cocoa или Win32 АРI, вы должны знать, что "оконные типы" поддерживают множество событий, происходящих в различные моменты цикла существования таких типов. То же самое можно сказать и о типах Windows Forms. Вы уже видели, что "жизнь" формы начинается тогда, когда вызывается конструктор типа, перед его передачей методу Application.Run.

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

Следующим событием, генерируемым после события Load, является событие Activated. Это событие генерируется тогда, когда форма получает фокус ввода, как активное окно на рабочем столе. Логическим "антиподом" события Activated является (конечно же) событие Deactivate, которое генерируется тогда, когда форма утрачивает фокус ввода, становясь неактивным окном. Легко догадаться, что события Activated и Deactivate в цикле существования формы могут генерироваться множество раз, поскольку пользователь может переходить от одного активного приложения к другому.

Поделиться с друзьями: