Средства базового класса 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 не инициируются.