Все вместе
А теперь давайте объединим все сказанное на практическом примере. Создайте консольное приложение и включите следующий фрагмент в первый (стартовый) модуль:
Module Modulel Private WithEvents anEmployee As EmployeeWithEvents Sub Main() Dim tom As New EmployeeWithEvents("Tom". 100000) anEmployee = tom Console.WriteLine(tom.TheName & "has salary " & tom.Salary) anEmployee.RaiseSalary(0.2D) ' Суффикс D – признак типа Decimal Console.WriteLinettom.TheName & "still has salary " & tom.Salary) Console.WritelineC'Please press the Enter key") Console.ReadLine() End Sub End Module
Теперь выберите в раскрывающемся списке метод anEmployee_SalarySecurityEvent. Исходный текст этого метода приведен ниже (для удобства чтения он разбит на несколько строк, а ключевая секция Handles выделена жирным шрифтом):
Public Sub anEmployee_SalarySecur1tyEvent(ByVal Sender As Event_Handling_I.EmployeeWithEvents, ByValeAs System.EventArgs) Handles anEmployee.SalarySecurityEverrt End Sub End Module
Обратите внимание на символ подчеркивания, добавленный VB.NET между именем переменной с ключевым словом WithEvents (anEmployee) и именем события (SalarySecurityEvent), – с ним обработчик внешне почти не отличается от процедур событий в VB6.
Также обратите внимание на идентификацию объекта Sender полным именем (в формате пространство_имен. имя_класса). Наличие дополнительных символов подчеркивания в пространстве имен объясняется тем, что пробелы в них не разрешены, поэтому VB.NET автоматически преобразует имя решения "Event Handling 1" в "Event_Handling_l" (рис. 6.3). Наконец, ключевое слово Handles сообщает исполнительной среде, какое событие обрабатывается этой процедурой.
Рис. 6.3. Окно свойств решения с обработкой событий