Иллюстрированный самоучитель по VB.NET

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


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

Три события клавиатуры инициируются в тех же ситуациях, что и их аналоги из прежних версий VB.

  • KeyPress: происходит при нажатии клавиши, когда элемент обладает фокусом.

  • KeyDown: происходит при переходе клавиши в нажатое состояние, когда элемент обладает фокусом.

  • Key Up: происходит при отпускании клавиши, когда элемент обладает фокусом.

    По аналогии с VB6 событие KeyDown инициируется раньше события KeyPress, которое, в свою очередь, предшествует KeyUp. Событие KeyPress использует объект KeyPressEventArgs, в свойстве KeyChar которого передается информация о нажатой клавише. Например, следующий фрагмент выводит окно сообщения в том случае, если введенный символ не является цифрой:

    Private Sub TextBoxl_KeyPress(ByVal sender As Object._

    ByVal e As System.Windows.Forms.KeyPressEventArgs)

    Handles TextBoxl.KeyPress

    If e.KeyChar < "0" Or e.KeyChar > "9" Then

    MsgBox("only digits allowed")

    End If

    End Sub

    События KeyDown и KeyUp, как и в VB6, могут использоваться для проверки клавиш-модификаторов (таких, как Ctrl и Alt). Класс KeyEventArgs, передаваемый этим событиям, обладает несколько большими возможностями, чем класс KeyPressEventArgs события KeyPress. Класс KeyEventArgs содержит свойство KeyData, в котором при помощи перечисляемого типа Key передается полная информация о комбинациях клавиш и о состоянии клавиш-модификаторов в момент нажатия. Свойства Modi f i ers и Shi ft позволяют узнать об одновременном нажатии трех клавиш (Alt+ +Shift+другая клавиша). Например, следующая команда проверяет, была ли нажата клавиша-модификатор Alt: If e.Modifiers =Keys.Alt Then

    Если вас не интересуют такие мелочи, как различия между левой и правой клавишей Shift, удобнее воспользоваться свойствами Control Shift и Alt класса KeyEventArgs.

    К сожалению, значения свойств KeyChar и KeyData нельзя сбросить, поскольку они доступны только для чтения [ Возможно, этот недочет будет исправлен в окончательной версии. ]. Впрочем, введенный символ можно «поглотить» и тем самым предотвратить его появление в элементе; для этого свойству Handled объекта события задается значение True. Пример:

    If e.KeyChar < "0" Or e.KeyChar >"9" Then

    e.Handled = True

    End If

    В результате неверный символ не появится в текстовой поле.



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