Обработчик событий в C# — это делегат со специальной сигнатурой, приведенной ниже.
Первый параметр (отправитель) в приведенном выше объявлении указывает объект, вызвавший событие.
Второй параметр (e) приведенного выше объявления содержит данные, которые можно использовать в обработчике событий. Класс MyEventArgs является производным от класса EventArgs. EventArgs является базовым классом для более специализированных классов, таких как MouseEventArgs, ListChangedEventArgs и т. д. Для события GUI вы можете использовать объекты этих специализированных классов EventArgs без создания собственных специализированных классов EventArgs. Однако для события без графического интерфейса вам необходимо создать собственный специализированный класс EventArgs для хранения ваших данных, которые вы хотите передать объекту делегата. Вы создаете свой специализированный класс EventArgs, производный от класса EventArgs.
В случае обработчика событий на объект делегата ссылаются с помощью ключевого слова event следующим образом:
Теперь мы настроим два класса, чтобы увидеть, как этот механизм обработки событий работает в среде .Net. Шаг 2 в обсуждении делегатов требует, чтобы мы определили методы с точно такой же сигнатурой, как у объявления делегата. В нашем примере класс A предоставит обработчики событий (методы с той же сигнатурой, что и у объявления делегата). Он создаст объекты-делегаты (шаг 3 в обсуждении делегатов) и подключит обработчик событий. Затем класс A передаст объекты-делегаты классу B. Когда событие произойдет в классе B, он выполнит метод обработчика событий в классе A.
Обработка событий GUI в C#
Обработка событий в Windows Forms (инфраструктура .NET, поддерживающая приложение с графическим интерфейсом) использует модель обработки событий .NET, описанную ранее. Теперь мы применим эту модель для написания простого приложения. Приложение имеет один класс MyForm, производный от класса System.Windows.Forms.Form. Класс MyForm является производным от класса Form. Если вы изучите код и три строки комментариев, вы заметите, что вам не нужно объявлять делегатов и ссылаться на них, используя ключевое слово event, потому что события (щелчок мышью и т. д.) для элементов управления графического интерфейса (форма, кнопка и т. д.) .) уже доступны вам, а делегатом является System.EventHandler. Однако вам по-прежнему необходимо определить метод, создать объект делегата (System.EventHandler) и подключить метод, который вы хотите активировать в ответ на событие (например, щелчок мыши), в объект делегата.
Комментариев нет:
Отправить комментарий