Access 2002

Использование ключевого слова WithEvents


Задача проста: вы разработали класс, который должен реагировать на события элемента управления, расположенного в форме. «Но ведь именно так чаще всего и происходит, — заметите вы, — мы помещаем элемент управления в форму и пишем код для обработки его событий». Конечно, если код обработки события поместить в модуль класса формы, все будет так, как обычно. Но что делать, если события должны обрабатываться в другом модуле класса?

В VBA это просто, хотя и не так, как в первом случае. Если вы хотите реагировать на события объекта формы или отчета не в том модуле, который непосредственно связан с формой или отчетом, объявите переменную для ссылки на этот объект (форму или отчет) с ключевым словом WithEvents. (Подробнее об использовании этого ключевого слова рассказывается в главе 10.) Объявление этой переменой может быть выполнено в такой форме:

Private WithEvents mtxt As TextBox

Обратите  на то, что данная переменная должна быть объявлена на уровне модуля и может существовать только в модуле класса. (А почему не в других модулях? Это ограничение может показаться непонятным, но оно имеет смысл — вы собираетесь использовать переменную для обработки событий, а процедуры обработки событий можно помещать только в модули классов.)

Одного объявления переменной недостаточно. Если вы хотите использовать ее, присвойте ей в качестве значения указатель на некоторый объект. Класс Incremental Search делает это в процедурах установки свойств TextBox и ListBox следующим образом:

Public Property Set TextBox(txt As TextBox)

Set mtxt – txt End Property

Теперь вы можете работать с переменной mtxt и обрабатывать ее события, как если бы она представляла текстовое поле в модуле формы.

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