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

Средства базового класса Control. События клавиатуры. События проверки.

Класс Control содержит более 300 членов, и описать их все (или хотя бы большую часть) в одной главе просто невозможно. Следовательно, вам все равно придется обратиться к электронной документации [Кстати говоря, пакет форм Windows автоматически опознает операции с колесом мыши и обеспечивает прокрутку формы/элемента там, где это имеет смысл. Таким образом, в большинстве случаев вам не придется использовать новое событие Control.MouseWheel.]. Однако события клавиатуры и события проверки, занимающие важное место в работе элементов, несколько отличаются от своих прототипов из VB6, и при работе с ними следует помнить о некоторых нюансах.

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

Три события клавиатуры инициируются в тех же ситуациях, что и их аналоги из прежних версий 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 передается полная информация о комбинациях клавиш и о состоянии клавиш-модификаторов в момент нажатия.

Свойства Modifiers и SHIFT позволяют узнать об одновременном нажатии трех клавиш (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

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

События проверки

В .NET вместо одного события проверки существуют целых два: Validating и Validated. Событие Validating инициируется перед утратой фокуса элементом. Например, следующий фрагмент гарантирует, что пользователь не оставит текстовое поле пустым:

Public Sub TextBoxl_Validating(ByVa1 sender As Object.
ByVal e As System.ComponentModel.CancelEventArgs)
Handles TextBoxl.Validating
' Если текстовое поле не содержит символов, отменить передачу фокуса
If TextBoxl.Text.Trim = String.Empty Then e.Cancel = True
End Sub

Команда e.Cancel = True отменяет передачу фокуса от текстового поля другому элементу, если в поле нет ни одного символа.

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

Примечание
Если свойство CausesValidation элемента равно False, события Validating и Validated не инициируются
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.