Инициализация формы
В предыдущем разделе мы говорили о статическом изменении свойств элементов управления, но это лишь первичная настройка объектов формы. Как правило, основные свойства, связанные с инициализацией данных, переносятся в программный модуль формы.
Рассмотрением инициализации подобных свойств мы и займемся в этой главе, но для начала несколько слов о форме как таковой. Если рассматривать форму с позиций программирования, то она представляет собой не что иное, как класс VBA. Членами этого класса являются элементы управления, расположенные на форме, а методами – show (показать форму), Hide (скрыть форму) и т. д. Более того, пользователь может добавлять собственные члены и методы.
Помимо этого форма обладает и рядом процедур реакции на событие, стандартными из которых для всех классов VBA являются initialize и Terminate (см. раздел "Классы и объекты").
Вернемся к нашей задаче и вспомним, что нам необходимо проинициализировать три списка нашей формы, а именно: series, author и duration. Если duration фиксирован и состоит из 12 элементов (12 месяцев), то относительно списков авторов и серий так сказать нельзя. Количество членов в группе писателей может увеличиваться и уменьшаться, ровно также дело обстоит и с сериями. Исходя из этого пользователь должен иметь возможность, не модифицируя кода программы, изменить количество элементов любого из списков.
В следующих разделах подробно описываются способы инициализации списков.
Статическое заполнение списка
Начнем, пожалуй, с самого простого статического заполнения списка duration, который просто состоит из двенадцати цифр, одну из которых пользователь (редактор) должен выбрать в качестве ориентировочной длительности проекта.
Программа 22.1. Статическое заполнение списка.
{На панели Project} 1R UserForml & View Code {В окне кода}
Private
Sub
Init_Duration()
Инициализация списка duration
With
duration
For
i = 1
To
12
.Addltem i
Next
i
.Listlndex = 0
End
With
End
Sub
Поясним код программы. Во-первых, мы создаем процедуру, которую впоследствии будем вызывать из конструктора формы. Во-вторых, используя оператор with, обращаемся к объекту формы duration. И наконец, в цикле от 1 до 12 инициализируем список.
После того как мы создали процедуру, ее необходимо вызвать. Естественно, что все процедуры инициализации мы будем размещать в конструкторе формы – процедуре – реакции на событие initialize.
Программа 22.2. Вызов процедуры из конструктора.
Private
Sub
UserForm_Initialize()
Init_Duration
End
Sub
Теперь, нажав клавишу F5, вы можете убедиться, что список duration инициализируется верно.
Работа с файлами
Следующий список который необходимо инициализировать – series. В отличие от duration, как было отмечено выше, этот список может изменяться, поэтому мы решили хранить список с названием серий в специальном файле bookseries.ini и забирать информацию для инициализации именно оттуда.
Рис. 22.4. Архитектура файла bookseries.ini
Таким образом, пользователю необходимо лишь добавить название новой серии в данный файл, как сделанные изменения тут же отобразятся в форме. Архитектура файла инициализации показана на рис. 22.4.