Проектирование интерфейса. Диалоговые окна
Перемещение фокуса на элемент управления
Только один из элементов управления формы находится в фокусе. Это означает, что этот элемент может принимать данные ввода, например, при нажатии клавиш клавиатуры или щелчки мыши. Пользователь, работающий с формой, может перемещать фокус по элементам управления в прямом направлении нажатием клавиши 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
Вот как выглядит эта простая форма ввода в процессе работы с ней:
Изменение размеров диалогового окна
Из процедур обработки событий можно менять свойства не только отдельных элементов управления, но и всего окна. В качестве примера рассмотрим динамическое изменение его размеров. Ранее мы уже говорили о том, что, изменяя размеры окна, можно скрывать те или иные элементы управления. Сейчас продемонстрируем это на примере. На стадии проектирования разместим в окне элементы управления, которые при первоначальном открытии окна не должны быть видны, но должны появиться в процессе работы пользователя с этим окном. Пусть в форме Cutting есть командная кнопка "Получить данные", и поля ввода "Доходы" и "Расходы" При открытии окна поля ввода недоступны, что достигается "отсечением" нижней части формы в процедуре инициализации. Вот как выглядит обработчик события Initialize нашей формы:
Private Sub UserForm_Initialize() 'Отсечение нижней части формы Me.Height = 90 End Sub
Так выглядит форма при ее открытии:
После щелчка командной кнопки обработчик события Click восстанавливает размер, заданный при проектировании формы. Он задает также и значения скрытых ранее полей:
Private Sub CommandButton1_Click() With Me 'Установить нормальную высоту формы .Height = 200 'Задать значения ранее не видимых полей .Доходы = 1570 .Расходы = 1500 End With End Sub
А так выглядит эта же форма после щелчка командной кнопки: