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< Назад | Оглавление | Далее >

Сайт управляется системой uCoz