Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 3....doc
Скачиваний:
37
Добавлен:
17.12.2018
Размер:
1.65 Mб
Скачать

Перемещение фокуса на элемент управления

Только один из элементов управления формы находится в фокусе. Это означает, что этот элемент может принимать данные ввода, например, при нажатии клавиш клавиатуры или щелчки мыши. Пользователь, работающий с формой, может перемещать фокус по элементам управления в прямом направлении нажатием клавиши Tab, а в обратном - комбинацией Shift+Tab. Порядок перемещения задается на стадии проектирования окна. Программно можно установить фокус, используя методSetFocus (Поместить в фокус) элемента, который должен оказаться в фокусе.

Рассмотрим форму, в которой есть поле ввода и командная кнопка. Нормальные действия пользователя предполагают, что он вводит информацию в поле ввода, а затем щелкает по командной кнопке. В этом случае обработчик события Click передает информацию из поля ввода переменной программе. Если же пользователь щелкнул по кнопке, забыв ввести информацию, то следует выдать предупреждающее сообщение, например, звуковой сигнал и вернуть фокус полю ввода. Вот такой сценарий и был реализован. Не будем приводить детали проектирования формы и все обработчики событий. Ограничимся только одним из них -обработчиком события щелчка командной кнопки:

Private Sub CommandButton1_Click()

With Me

If.TextBox1.Text = "" Then

Beep: Beep: Beep

.TextBox1.SetFocus

Else

GlobeVar =.TextBox1.Text

MsgBox GlobeVar

.Hide

End If

End With

End Sub

Вот как выглядит эта простая форма ввода в процессе работы с ней:

Рис. 12.18.  Простая форма ввода

Изменение размеров диалогового окна

Из процедур обработки событий можно менять свойства не только отдельных элементов управления, но и всего окна. В качестве примера рассмотрим динамическое изменение его размеров. Ранее мы уже говорили о том, что, изменяя размеры окна, можно скрывать те или иные элементы управления. Сейчас продемонстрируем это на примере. На стадии проектирования разместим в окне элементы управления, которые при первоначальном открытии окна не должны быть видны, но должны появиться в процессе работы пользователя с этим окном. Пусть в форме Cutting есть командная кнопка "Получить данные", и поля ввода "Доходы" и "Расходы" При открытии окна поля ввода недоступны, что достигается "отсечением" нижней части формы в процедуре инициализации. Вот как выглядит обработчик события Initialize нашей формы:

Private Sub UserForm_Initialize()

'Отсечение нижней части формы

Me.Height = 90

End Sub

Так выглядит форма при ее открытии:

Рис. 12.19.  Усеченная форма в момент ее открытия

После щелчка командной кнопки обработчик события Click восстанавливает размер, заданный при проектировании формы. Он задает также и значения скрытых ранее полей:

Private Sub CommandButton1_Click()

With Me

'Установить нормальную высоту формы

.Height = 200

'Задать значения ранее не видимых полей

.Доходы = 1570

.Расходы = 1500

End With

End Sub

А так выглядит эта же форма после щелчка командной кнопки:

Рис. 12.20.  Форма Cutting со скрытыми ранее полями

Проверка корректности данных

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

Событие Exit имеет параметр Cancel, значение которого следует установить в обработчике события. Если параметру присвоить значение True, то фокус остается на текущем элементе, в противном случае он переходит к элементу, следующему согласно Tab - порядка. Вот как выглядит форма при попытке задания некорректного значения температуры:

Рис. 12.21.  Проверка корректности ввода данных