* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Реализация обработчиков событий
8 февраля 2009
Чтобы генерировать объявленное событие, необходимо связать с ним один или не- сколько обработчиков. Обработчик события — это метод, который вызывается по- средством делегата всякий раз, когда генерируется соответствующее событие. Что- бы этот механизм работал, необходимо связать обработчики с обрабатываемыми событиями. Если в программе на Visual Basic .NET генерировать событие, с кото- рым не связан ни один обработчик, попросту ничего не произойдет; в Visual C# же подобные действия закончатся ошибкой.
Подобно другим членам, события бывают как членами экземпляров, так и об- щими (Shared) или статическими (static) членами. При создании обработчика для события экземпляра нужно связать метод-обработчик и это событие, для чего не- обходимо сначала создать объект. Общие (статические) события принадлежат клас- су, а не его экземплярам, поэтому для создания обработчика такого события не тре- буется предварительно создавать экземпляр класса. Создание обработчиков событий в Visual Basic .NET Обработчик события в Visual Basic .NET следует объявлять как процедуру (Sub), он не может возвращать значения. Процедуру связывают с обрабатываемым ей собы- тием при помощи ключевого слова AddHandler. После AddHandler следует имя со- бытия и указатель на метод, с которым будет связано это событие. Указатель на метод создают оператором AddressOf, например, так: Visual Basic .NET Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) AddHandler myEvent, AddressOf myHandler End Sub Ключевое слово AddHandler не разрешается применять декларативно — только внутри метода. В силу этих причин связь между событием и его обработчиком со- здается только во время выполнения. Чтобы связь между обработчиком и событием существовала на протяжении всего срока жизни объекта, следует поместить ключе- вое слово AddHandler в конструктор объекта. В Visual Basic .NET можно связывать обработчики с обрабатываемыми ими со- бытиями и во время разработки. Для этого применяется конструкция Handles. При этом объект-приемник события необходимо объявить с ключевым словом With- Events, которое разрешает ему регистрироваться для уведомления о событиях объек- та, указанного в поле WithEvents. Конструкция Handles завершает объявление метода, в ней определяют событие объекта, обрабатываемое этим методом, например: Visual Basic .NET Public Sub DisplayResults() Handles Account.CalculationComplete Реализация опущена End Sub Создание обработчиков событий на Visual C# В отличие от Visual Basic .NET, в Visual C# обработчикам событий разрешается воз- вращать значение, которое можно присваивать переменной, как это делается при вызове функции. Чтобы связать некоторый метод с событием, следует создать эк- земпляр соответствующего делегата, ссылающегося на этот метод, и связать его с событием при помощи оператора +=. Этот оператор также позволяет связать собы- тие с существующим экземпляром делегата, например, так: Visual C# // Это пример предполагает наличие метода DisplayResults // с сигнатурой делегата calculationDelegate. // Создать экземпляр делегата, он необходим, чтобы // связать событие с его обработчиком. Account. CalculationComplete +- new calculationDelegate(DisplayResults); // Связать событие с обработчиком при помощи существующего экземпляра делегата. CalculationOelegate calc = new calculationDelegate(DisplayResults); Account. CalculationComplete += calc; Для событий элементов управления и классов из библиотеки базовых классов .NET Framework предоставляются делегаты по умолчанию. Чтобы добавить обра- ботчик для этих событий вручную, необходимо объявить новый делегат либо со- здать новый экземпляр предопределенного типа-делегата. Например, с большин- ством элементов управления из пространства имен System, Windows. Forms применя- ется класс -делегат System, EventHandler. Ниже показан пример, иллюстрирующий назначение обработчика событию Click элемента управления button 1: Visual C# buttonl. Click += new System. EventHandler(clickHandler); В отличие от Visual Basic .NET, в Visual C# нет механизма для декларативного связывания событий с их обработчиками. ^ Обработка событий в Visual Basic .NET • При помощи ключевого слова AddHandler свяжите событие с методом, который его будет обрабатывать; для получения указателя на метод воспользуйтесь опе- ратором AddressOf. Помните, что сигнатуры события и его обработчика должны совпадать. • Другой вариант — связать метод с обрабатываемым им событием во время раз- работки (при помощи ключевого слова Handles). При этом метод-обработчик должен быть членом объекта, объявленного с ключевым словом With Events. > Обработка событий в Visual C# Создайте экземпляр делегата, соответствующего событию, и ссылающегося на метод, который должен обрабатывать это событие, затем воспользуйтесь операто- ром +=, чтобы связать событие с созданным экземпляром делегата.