Access 2002

Обработка событий формы


У объекта FormResize есть процедуры, которые вызываются в ответ на события формы Resize и Load. Эти процедуры хранятся в модуле класса FormResize и называются frm_Load и frm_Resize. Для обработки событий формы их вызывает сама Access. Как же это возможно?

Обратите  на объявление переменной frm в модуле класса FormResize. Оно находится в самом начале раздела объявлений и выглядит так: Private WithEvents frm As Form

Когда в модуле формы вы устанавливаете значение для свойства Form объекта FormResize, ссылка на вашу форму присваивается переменной frrr. Ее объявление с ключевым словом WithEvents обеспечивает появление дополнительной функции этой переменной: каждый раз, когда в форме происходит какое-нибудь событие, Access вызывает процедуру его обработки, связанную с переменной frm. Другими словами, Access вызывает процедуры обработки события объекта из всех классов, в которых ссылка на данный объект объявлена с ключевым словом WithEvents. Модуль класса формы работает точно так же, только ссылка на форму в нем по умолчанию создается «с событиями», причем Access формирует ее «за сценой», так что она вообще не нуждается в вашем объявлении. А процедуры этого модуля всегда выполняются в первую очередь.

Эту технологию мы несколько раз использовали в различных примерах, в частности в главах 6, 7 и 15. Она позволяет разрабатывать классы, реагирующие на события созданных вами объектов без какой-либо поддержки со стороны самих объектов, так что при их подключении к уже готовому приложению вам не придется дополнять его программный код ничем, кроме операторов создания и настройки экземпляров класса.

Вот два обстоятельства, о которых вы не должны забывать при создании классов, обрабатывающих события других объектов.

Комментарии закрыты