Основы офисного программирования и язык VBA

         

События KeyDown, KeyUp (Клавиша нажата, Клавиша отпущена)


Событие KeyDown возникает, когда пользователь нажимает клавишу на клавиатуре, а событие KeyUp, - когда отпускает. Пока клавиша нажата, чередуются события KeyDown и KeyPress. Сообщения о нажатии клавиш получает диалоговое окно или элемент управления, находящиеся в фокусе. При этом диалоговое окно может находиться в фокусе, только если в нем нет элементов управления либо все они отключены ("серые"). Эти события появляются и при посылке в диалоговое окно кодов символов из макроса с помощью операции SendKeys или из программы VBA оператором SendKeys. Если посланный символ приводит к перемещению фокуса от одного элемента к другому, событие KeyDown происходит для первого из них, а события KeyPress и KeyUp - для второго.

События KeyDown и KeyUp не возникают при нажатии клавиш, если нажата клавиша:

  • - Enter, а в диалоговом окне есть командная кнопка со свойством Default, равным True;
  • - Esc, а в диалоговом окне есть кнопка, для которой свойство Cancel равно True.

Заголовки процедур обработки этих событий выглядят так:

Private Sub объект_KeyDown (ByVal KeyCode As MSForms. ReturnInteger, ByVal Shift As fmShiftState)

Private Sub объект_KeyUp (ByVal KeyCode As MSForms. ReturnInteger, ByVal Shift As fmShiftState)

Здесь объект - имя объекта, которому принадлежит процедура, KeyCode - число, являющееся кодом нажатой или отпущенной клавиши. Параметр Shift задает состояние клавиш Shift, Ctrl и Alt. Его возможные значения: fmShiftMask = 1 - нажата клавиша Shift, fmCtrlMask = 2 - нажата клавиша Ctrl, fmAltMask = 4 - нажата клавиша Alt.

Типичные примеры использования событий KeyDown и KeyUp связаны с обработкой нажатий дополнительных (не буквенных) клавиш: функциональных, клавиш-стрелок, Home, End, Pageup, Pagedown и Tab, цифровых. Они позволяют отреагировать также на нажатие комбинаций, состоящих из клавиши стандартной клавиатуры и одной из дополнительных клавиш-модификаторов (Shift, Ctrl или Alt). Для работы же со стандартными символами ANSI удобней использовать событие KeyPress.



Содержание раздела