Пользовательские диалоговые окна

Диалоговые окна предназначены для информирования пользователя, а также для получения данных от пользователя. В большинстве случаев диалоговые окна являются модальными (т. е. блокирующими все окна приложения) и отображаются на непродолжительный промежуток времени. В разд. 1.6 мы уже рассматривали встроенные диалоговые окна, позволяющие вводить данные или отображать сообщения. Однако, возможностей этих диалоговые окон часто недостаточно. В этой главе мы научимся создавать пользовательские диалоговые окна произвольного назначения.

Создание формы

Создание диалогового окна начинается с создания формы. Создать пустую форму можно следующими способами:

В результате будет создана форма и отображена в отдельном окне. Вместе с формой автоматически создается модуль формы и его ярлык добавляется в окне Project Explorer в папку Forms. В нашем случае в папку Forms добавляется ярлык UserForm1. Двойной щелчок на этом ярлыке приводит к отображению окна с формой. Аналогичного результата можно достичь, если щелкнуть правой клавишей мыши на ярлыке и из контекстного меню выбрать пункт View Object. Чтобы отобразить модуль формы следует щелкнуть правой клавишей мыши на ярлыке и из контекстного меню выбрать пункт View Code.

Отображение и сокрытие окна

Для отображения окна из программы предназначен метод Show() объекта формы. Формат метода:

Show [<Модальность>]

Метод Show() загружает объект формы в память, если она не была загружена ранее, и отображает окно. В необязательном параметре <Модальность> можно указать будет окно модальным (блокирующим все другие окна приложения) или нет. Если указана константа vbModal (имеет значение 1) или параметр не указан, то окно будет модальным. Чтобы сделать окно немодальным следует указать константу vbModeless (имеет значение 0).

Попробуем отобразить созданную в предыдущем разделе форму. Для этого в пользовательском модуле создаем процедуру ОтобразитьФорму() со следующим кодом:

Sub ОтобразитьФорму()
   UserForm1.Show
End Sub

Далее запускаем эту процедуру на выполнение, нажимая клавишу <F5>. В результате по центру окна приложения отобразится пользовательское окно. Так как параметр <Модальность> не указан, окно будет модальным. Пользователь не сможет взаимодействовать с рабочим листом пока не закроет диалоговое окно. Чтобы закрыть окно следует нажать кнопку Закрыть в заголовке окна.

Метод Hide() позволяет скрыть окно. При этом объект формы не удаляется из оперативной памяти компьютера и с ним можно работать программно.

С помощью процедуры Load <Объект формы> можно загрузить объект формы в оперативную память. При этом окно не отображается на экране, но с ним можно работать из программы. Для удаления объекта формы из оперативной памяти предназначена процедура Unload <Объект формы>.

В качестве примера усложним нашу программу и добавим на форму кнопку, при нажатии которой закроем окно. Отображаем окно с формой, сделав двойной щелчок на ярлыке UserForm1 из папки Forms в окне Project Explorer. Вместе с окном формы откроется окно Toolbox с различными компонентами. Если окно Toolbox не открылось, то из меню View выбираем пункт Toolbox. В окне Toolbox щелкаем мышью на переключателе CommandButton, переходим в окно с формой и щелкаем мышью внутри формы. В результате кнопка отобразится на форме.

Теперь добавим процедуру-обработчик нажатия кнопки. Для этого делаем двойной щелчок на кнопке внутри формы. В результате отобразится окно модуля формы. Внутри процедуры CommandButton1_Click() добавляем вызов процедуры Unload():

Private Sub CommandButton1_Click()
   Unload Me
End Sub

Обратите внимание на ключевое слово Me, которое мы использовали вместо названия объекта формы. Это ключевое слово ссылается на объект текущей формы.

Далее изменим процедуру ОтобразитьФорму() в пользовательском модуле. Внутри этой процедуры загрузим форму в оперативную память, изменим надпись на кнопке, а затем отобразим окно:

Sub ОтобразитьФорму()
   Load UserForm1
   UserForm1.CommandButton1.Caption = "Закрыть окно"
   UserForm1.Show
End Sub
Предыдущая статья Все статьи