netlib.narod.ru | < Назад | Оглавление | Далее > |
Значительная часть функциональности клавиатуры реализована в классе Control. Он поддерживает следующие события и методы для обработки нажатия и отпускания клавиш:
События Control (выборочно)
Событие | Метод | Делегат | Аргумент |
KeyDown | OnKeyDown | KeyEventHandler | KeyEventArgs |
KeyUp | OnKeyUp | KeyEventHandler | KeyEventArgs |
Как и в любом классе, производном от Control (например, в Form), методы OnKeyDown и OnKeyUp можно переопределить:
protected override void OnKeyDown(KeyEventArgs kea) { ... } protected override void OnKeyUp(KeyEventArgs kea) { ... }
Это обычный способ обработки событий клавиатуры в классе, производном от Form.
События, возникающие при нажатии и отпускании клавиш, также можно обрабатывать в объектах, порожденных от класса Control или его потомков. Но сначала нужно определить методы как делегаты KeyEventHandler:
void MyKeyDownHandler(object objSender, KeyEventArgs kea) { ... } void MyKeyUpHandler(object objSender, KeyEventArgs kea) { ... }
Затем — зарегистрировать обработчики событий клавиш:
cntl.KeyDown += new KeyEventHandler(MyKeyDownHandler); cntl.KeyUp += new KeyEventHandler(MyKeyUpHandler);
Независимо от того, как это сделано, при нажатии или отпускании клавиши вы получите объект KeyEventArgs с такими свойствами:
Свойства объекта KeyEventArgs
Тип | Свойство | Доступ | Комментарий |
Keys | KeyCode | Чтение | Идентифицирует клавишу |
Keys | Modifiers | Чтение | Идентифицирует состояния регистра |
Keys | KeyData | Чтение | Комбинация KeyCode и Modifiers |
bool | Shift | Чтение | Равно true, если нажата клавиша Shift |
bool | Control | Чтение | Равно true, если нажата клавиша Ctrl |
bool | Alt | Чтение | Равно true, если нажата клавиша Alt |
bool | Handled | Чтение/запись | Устанавливается обработчиком события (изначально равно false) |
int | KeyValue | Чтение | Возвращает KeyData в виде целочисленного значения |
Здесь куча избыточной информации. Из всех этих свойств нужны только KeyData и Handled, а значения остальных свойств можно вывести из KeyData. Но эта избыточность удобна: вероятно, вы обнаружите, что чаще всего используете именно свойства KeyCode, Shift, Control и Alt.
Первые три свойства относятся к одному типу — очень важному перечислению Keys. Свойство KeyCode сообщает, какая клавиша нажата (и это самое важное), свойство Modifiers — нажаты ли также клавиши Alt, Ctrl или Shift. Свойство KeyData комбинирует значения KeyCode и Modifiers, a Shift, Control и Alt дублируют данные свойства Modifiers логическими значениями. Иногда элемент управления устанавливает свойство Handled как true, чтобы указать родительскому объекту, что событие клавиатуры используется им и не должно передаваться родительскому объекту. KeyValue возвращает ту же информацию, что и KeyData, но в виде целых чисел, а не значений перечисления Keys.
netlib.narod.ru | < Назад | Оглавление | Далее > |