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


Где и как следует создавать обработчики событий для экземпляров класса - часть 2


Теперь становится понятным, что тогда шла речь о частном случае. Помните, при создании класса ExcelWithEvents, говоря о его структуре, мы обращали внимание на то, что в классе объявлен всего лишь один объект с событиями. Теперь становится понятным, это отражало специфику частного случая, - приложение, обычно, существует в единственном экземпляре. Личностей же, реагирующих на события, может быть много, - для каждой из них нужно задать свой экземпляр объекта в классе, чтобы была возможность написать индивидуальный обработчик события. Взгляните на реализацию класса Личности:

Option Explicit Private WithEvents myFriendOne As Личность Private WithEvents myFriendTwo As Личность

Private Sub myFriendOne_ДеньРождения(Dat As Date) BirthDay (Dat) End Sub

Private Sub myFriendOne_ИзменениеФамилии(Fam As String, _ NewFam As String, Permission As Boolean) MsgBox ("Изменение фамилии " & Fam & " на " & NewFam & Chr(13) _ & "не разрешается.") Permission = False End Sub

Private Sub myFriendTwo_ДеньРождения(Dat As Date) BirthDay (Dat) End Sub

Private Sub myFriendTwo_ИзменениеФамилии(Fam As String, _ NewFam As String, Permission As Boolean) MsgBox ("Поздравляю с замужеством, дорогая " & _ Fam & "-" & NewFam & "!") Permission = True End Sub

Public Sub BirthDay(Dat As Date) Debug.Print Dat, "-", Now Select Case Day(Dat) Case Day(Now) MsgBox ("Сегодня День Рождения!") Case Is < Day(Now) MsgBox ("Вчера был День Рождения!") Case Else MsgBox ("Завтра День Рождения!") End Select

End Sub

Public Sub Connect() Set myFriendOne = FriendOne Set myFriendTwo = FriendTwo End Sub

Пример 4.6.

Как видите, в этом классе два Private объекта, реагирующих на события, и для каждого из них написаны по два обработчика событий класса. Сейчас не суть важно, что делают эти разработчики. В одном случае обработчик события ИзменениеФамилии разрешает это изменение, в другом - нет, и выдает по этому поводу, естественно, разные сообщения.Обработчики события ДеньРождения выполняют одну и ту же задачу, поэтому они вызывают общую процедуру работы. Это, хотя и интересные, но все-таки детали. Более важную для понимания играет роль процедура, названная Connect.




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



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