Книга: VBA для чайников

Загрузка и отображение форм

Загрузка и отображение форм

Процесс отображения формы в VBA состоит из двух шагов;

* загрузка формы в память;

* отображение формы на экране.

Оба этих шага можно осуществить с помощью одного оператора VBA, Но иногда полезно разделить эти шаги и использовать для них отдельные операторы.

Отображение форм осуществляется методом Show. Например, если именем формы является FormICa, то нужно просто напечатать:

FormICa.Show

Заметьте, что Show - это метод объекта Us er Form, поэтому метод добавляется к имени формы после точки-разделителя. Если указанная форма еще не загружена в память, метод Show сначала загрузит форму, а потом сделает ее видимой.

Чтобы загрузить форму в память перед отображением, используйте оператор Load. Load - это не метод, поэтому в данном случае синтаксис другой (по сравнению с использованием Show):

Load ФормАльДеГид

Зачем загружать форму, не отображая ее? Загрузка формы происходит намного дольше, чем ее отображение. Программа любой сложности выполняет немало процедур инициализации (типа чтения данных из файлов, вычисления начальных значений переменных и создания объектов), поэтому при запуске программы некоторая задержка весьма привычна. Если в это время вы загрузите и свои формы, пользователь отнесется к задержке благосклоннее, чем к такой же задержке во время работы программы. Единственный недостаток предварительной загрузки форм заключается в том, что для них нужна память, которая могла бы использоваться для других целей.

Можно загрузить форму и без оператора Load, выполнив оператор, в котором вызывается свойство либо метод формы или любого из помещенных в нее элементов управления. При этом можно вносить в форму изменения перед тем, как она отображается на экране, Хотя окно свойств редактора Visual Basic позволяет безо всякого программирования управлять тем, как форма будет выглядеть и вести себя на экране, здесь нужно отметить следующее: часто вообще нельзя узнать, как должна выглядеть и что должна делать форма (или ее элементы управления), пока программа не начнет выполняться.

Предположим, например, что в заголовке формы должны отображаться текущие дата и время. Вы не можете предугадать, когда именно пользователь запустит вашу программу, поэтому вам придется поручить VBA указать дату и время за вас. Это можно сделать, например, так:

Sub DisplayDateCaptionedForm()

DateCaptionedForm.Caption = Now

DateCaptionedForm.Show

End Sub

Аналогично можно заставить надпись или текстовое поле формы отображать информацию о том, что в данный момент выделено в VBA-приложении. На рис. 10.24 показано то, что можно увидеть в результате выполнения следующей процедуры VBA, связанной с подходящей формой в Visio:

Sub DisplayShowSelectionForm()

Dim ItemCount As integer, Message As String

Items = ActiveWindow.Selection.Count

Message = "Выделено объектов: " & CStr(Items) S "."

ShowSelectionForm.lblCountOfItems.Caption = Message

ShowSelectionForm.Show

End Sub

Рис. 10.24. В этой программе содержание текста надписи выясняется непосредственно перед отображением формы

Обратите внимание на строку программного кода, в которой изменяется свойство элемента управления "'надпись" в форме:

ShowSelectionForm.lblCountOfItems.Caption = Message

Технически невозможно получить доступ к свойству или методу формы до тех пор, пока форма не будет загружена, Однако вам не нужно писать для этого явный оператор. VBA автоматически загружает форму, как только потребуется выполнить оператор, ссылающийся на одно из ее свойств или на один из ее методов. Ссылка на свойство или метод любого из элементов управления в форме порождает тот же эффект.

Пример из предыдущего раздела демонстрирует один из способов внесения изменений в форму перед ее отображением на экране - из стандартной процедуры обычного модуля.

Но, как говорится, содрать с капусты листья можно многими способами. В нашем случае есть варианты- события Initialize (Инициализация) и Activate (Активизация) формы.

Программный код, помещенный в процедуры обработки этих событий, выполняется автоматически, когда случаются соответствующие события. Выбрать между этими событиями помогут следующие правила.

* Используйте событие Initialize для программного кода, который должен выполняться только при первой загрузке формы.

* Используйте событие Activate для программного кода, который должен выполняться при каждом отображении формы на экране (включая и первое отображение).

Создание программного кода для процедур обработки событий обсуждается ниже, в разделе "Главные события".

Используйте метод Hide (Скрыть), чтобы закрыть форму и таким образом получить возможность вернуться в документ VBA-приложения или активизировать другую форму. Это делается следующим оператором:

FormErly.Hide

Правда, метод Hide можно использовать не в любом месте программы. Если форма модальная, метод Hide нужно поместить в процедуру обработки события, принадлежащую самой форме.

Как упоминалось раньше в настоящей главе, если открыта модальная форма, выполняться могут только процедуры, связанные с этой формой.

И кстати, при вызове метода Hide в процедуре обработки события, принадлежащей этой форме, имя формы указывать не требуется - VBA достаточно сообразителен, чтобы понять, что в данном случае метод Hide принадлежит именно этой форме. Поэтому в процедуре обработки события, принадлежащей форме, можно просто напечатать Hide и эта форма исчезнет.

Чаше всего оператор Hide размещают в конце процедуры обработки события Click (Щелчок) для КНОПОК ОК, Отмена или Закрыть. Примеры вы найдете ниже, в разделах

"Добавление кнопок Закрыть и Отмена" и "Программирование кнопки ОК".

Скрытая форма не удаляется из памяти, вы сможете отобразить ее снова без лишних задержек с помощью метода Show в любое время.

Если известно, что форма больше в программе не понадобится, уничтожьте ее совсем, удалив из памяти. В небольших VBA-программах в этом нет необходимости, но когда ваши программы станут большими и память будет как награда, уничтожение ненужных форм приобретет очевидный смысл.

Как и для загрузки формы, для выгрузки формы из памяти используется не метод, я оператор Unload Formation.

Выгрузка формы удаляет ее и с экрана, если до этого форма была видима.

Если известно, что форма больше в программе не понадобится, замените метод Hide в процедурах обработки событий формы на оператор Unload. В этом случае оператор Unload Me эквивалентен оператору Unload имя_формы, поскольку ключевое слово Me представляет текущую форму.

Однако, в отличие от метода Hide, оператор Unload применим и к модальным формам, которые не присутствуют на экране. С помощью оператора Unl oad, размещенного в главной части программы (т.е. в процедуре, не связанной с формами), можно выгружать любые формы, в том числе и скрытые модальные формы.

Оглавление книги


Генерация: 0.053. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз