Основы офисного программирования и язык VBA


Как зажигаются события - часть 2


Добавим еще один параметр Permission нашему событию, так чтобы обработчик события, проверив допустимость изменения фамилии, мог вернуть разрешение на изменение. Новый вариант события теперь выглядит так:

Public Event ИзменениеФамилии(Fam As String, NewFam As String, _ Permission As Boolean)

Соответственно изменится и процедура - свойство Property Let. Вот другой, более разумный вариант этой процедуры:

Public Property Let ВашаФамилия(ByVal NewValue As String) 'Зажигает событие ИзменениеФамилии Dim Permission As Boolean 'Разрешение на изменение фамилии Permission = True RaiseEvent ИзменениеФамилии(Фамилия, NewValue, Permission) 'Обработчик события может запретить изменение фамилии If Permission Then Фамилия = NewValue End Property

Менее ясно, где и когда следует зажигать событие ДеньРождения. Мы решили возбуждать это событие в тот момент, когда пользователь интересуется датой рождения объекта, и вставили соответствующую проверку в Property Get ВашаДатаРождения процедуру:

Public Property Get ВашаДатаРождения() As Date 'Зажигает событие ДеньРождения 'в зависимости от значения текущей даты If (Month(Now) = Month(ДатаРождения)) And _ (Abs(Day(Now) - Day(ДатаРождения)) <= 1) Then RaiseEvent ДеньРождения(ДатаРождения) End If ВашаДатаРождения = ДатаРождения End Property

Здесь событие возбуждается при выполнении некоторого условия, - текущая дата отличается от даты дня рождения не более чем на сутки. Дата рождения передается обработчику события, а тот, в свою очередь, может организовать уведомление и поздравление объекта с днем рождения, как это делает, например, Outlook для контактов из списка контактов.

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




Начало  Назад  Вперед



Книжный магазин