Одна из важных функций диалоговых окон, - прием и передача данных, введенных пользователем, для хранения и дальнейшей обработки в систему. Основной вид элементов управления, предназначенных для ввода, - это окна редактирования (TextBox). Для предотвращения ошибок, связанных с неверным типом введенных данных или нарушением некоторых условий, которым эти данные должны удовлетворять следует проверять их корректность до выхода из диалогового окна. Чуть выше мы приводили пример работы с простой формой ввода, где проверялась ситуация, когда пользователь "забыл" ввести данные в окно ввода. Сейчас мы рассмотрим ситуацию, в которой пользователь пытается ввести некорректные данные в поле ввода. Возникает вопрос, где следует проводить проверку на корректность данных? По-видимому, одним из лучших мест является обработчик события Exit, которым обладает элемент управления TextBox. Обработчик этого события вызывается при попытке выхода из окна редактирования. Здесь и следует проводить проверку введенных данных, чтобы не допустить выхода, если данные заданы некорректно.
Продолжим работу с простой формой ввода и предположим, что в поле ввода следует ввести температуру больного человека, значение, которой, естественно, ограничено сверху и снизу. Вот как выглядит обработчик события Exit:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim Msg As String Const MinTemp = 34 Const MaxTemp = 42 Msg = "Ошибка ввода:" & vbCrLf 'Проверка, являются ли данные числовыми If Not IsNumeric(TextBox1.Text) Then Msg = Msg & "Введите числовые данные в формате: ##.#" MsgBox Msg Cancel = True 'Оставляет фокус в поле ввода
ElseIf TextBox1.Text < MinTemp Then Msg = Msg & "Температура слишком низкая" & vbCrLf _ & "Проверьте, что с Вашим больным!" MsgBox Msg Cancel = True 'Оставляет фокус в поле ввода ElseIf TextBox1.Text > MaxTemp Then Msg = Msg & "Температура слишком высокая" & vbCrLf _ & "Проверьте, что с Вашим больным!" MsgBox Msg Cancel = True 'Оставляет фокус в поле ввода Else GlobeVar = TextBox1.Text Debug.Print GlobeVar End If
End Sub
Пример 12.2.
Событие Exit имеет параметр Cancel, значение которого следует установить в обработчике события. Если параметру присвоить значение True, то фокус остается на текущем элементе, в противном случае он переходит к элементу, следующему согласно Tab - порядка. Вот как выглядит форма при попытке задания некорректного значения температуры: