Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УчебноеПособие по VB_6.doc
Скачиваний:
21
Добавлен:
24.12.2018
Размер:
3.17 Mб
Скачать

Использование событий клавиатуры для контроля на уровне полей

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

Sub txtText1_KeyPress(KeyAscii As Integer)

KeyAscii=Asc(VCase(Chr(KeyAscii)))

End Sub

Функция Chr преобразует код нажатой клавиши в символ, функция VCase переводит данный символ в верхний регистр, а функция Asc снова преобразует символ в числовой код.

Например, нажата клавиша с символом “а” - код 97. Код 97 преобразуется в символ “а” функцией Chr, функция VCase преобразует символ ”а” в символ “А”, функция Asc возвращает код 65.

События KeyUp и KeyDown распознают статус клавиатуры: первое событие генерируется в момент нажатия клавиши, а второе в момент отпускания. Кроме того имеется возможность отслеживать нажатие функциональных клавиш Shift, Ctrl, Alt одновременно с нажатием символьной клавиши, например Ctrl + C. Факт нажатия и отпускания клавиши возвращается через параметр KeyCode, а нажатие функциональной клавиши – через параметр Shift.

Пример 7.2. Контроль нажатой клавиши

Private Sub txtText1_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case Shift

Case 1

Print “Нажата клавиша Shift”

Case 2

Print “Нажата клавиша Ctrl”

Case 3

Print “Нажаты клавиши Shift и Ctrl”

Case 4

Print “Нажата клавиша Alt”

Case 5

Print “Нажаты клавиши Shift и Alt”

Case 6

Print “Нажаты клавиши Ctrl и Alt”

Case 7

Print “Нажата клавиша Ctrl, Shift и Alt”

End Select

End Sub.

Следующий код контролирует нажатие клавиш “А” и Shift:

Private Sub txtText1_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode=65 And Shift=1 Then

Print “Нажаты клавиши А и Shift”

End If

End Sub.

Проверка данных с использованием события Change

При небольшом числе полей ввода для контроля ввода данных можно использовать событие Change элемента управления TextBox.

Например, если форма имеет два поля ввода txtText1 и txtText2, то код контроля будет иметь следующий вид:

Private Sub cmd OKEnabled ( )

If txtText1.Text < > “ “ And txtText2.Text < > “ “ Then

cmdOK.Enabled=True

Else

cmdOK.Enabled=False

End If

End Sub.

Private Sub txtText1_Change ( )

Call cmdOKEnabled

End Sub

Private Sub txtText2_Change ( )

Call cmdOKEnabled

End Sub

В данном примере процедура контроля cmdOKEnabled вызывается в обработчике события Change каждого поля ввода. Если хотя бы одно из полей ввода пустое, кнопка ОК остается недоступной.

Функции проверки данных

Visual Basic 6 имеет несколько функций, позволяющих проверять типы данных: IsNumeric, IsDate и другие.

Функция IsNumeric возвращает True, если аргумент является числовым и False в ином случае. Функция IsDate возвращает True, если в аргументе содержится допустимая дата. Эти функции можно применять совместно с функцией InputBox:

StrValue=InputBox(“Введите число”)

If IsNumeric (strValue) Then

Print “Введено число”

Else “Не корректный ввод данных”

End If

Пример 7.3. Проверка ввода числовых данных на уровне полей формы.

Public Sub txtTextNumeral(KeyAscii As Integer)

Select Case KeyAscii

Case Asc("0") To Asc("9"), Asc("."), 8

‘ если нажаты клавиши от 0 до 9, точка или клавиша BackSpace

Numeral = Numeral + Chr(KeyAscii)

Case Else

‘ если иначе, то код KeyAscii сбрасывается и никаких

‘ изменений не происходит

KeyAscii = 0

Beep

End Select

End Sub

Событие Validate.

Перед тем, как элемент управления потеряет фокус ввода, в нем возникает событие Validate – но только если свойство CausesValidation элемента управления, который вскоре получит фокус ввода, установлено как True. Событие Validation в сочетании со свойством CausesValidation позволяет проверять данные, когда пользователь пытается переключиться на другой элемент управления. Это событие предоставляет аргумент Cancel: установив его, как True, можно запретить переключение на другой элемент.