Обзор событий (Windows Forms)
Событие — это действие, на которое можно реагировать или "обработать" в коде. События могут создаваться действием пользователя, например щелчком мыши или нажатием клавиши; по коду программы; или системой.
Приложения, управляемые событиями, выполняют код в ответ на событие. Каждая форма и элемент управления предоставляют предопределенный набор событий, с которыми можно работать в программе. Если происходит одно из этих событий и в связанном обработчике событий есть код, вызывается этот код.
Типы событий, создаваемые объектом, различаются, но многие типы являются общими для большинства элементов управления. Например, большинство объектов обрабатывает событие Click. Если пользователь щелкает форму, выполняется код в Click обработчике событий формы.
Заметка
Многие события происходят в сочетании с другими событиями. Например, в ходе события DoubleClick происходят события MouseDown, MouseUpи Click.
Сведения о том, как вызывать и использовать событие, см. в разделе События.
Делегаты и их роль
Делегаты — это классы, часто используемые в .NET Framework для создания механизмов обработки событий. Делегаты примерно приравниваются к указателям функций, часто используемым в Visual C++ и других объектно-ориентированных языках. В отличие от указателей функций, делегаты являются объектно-ориентированными, типобезопасными и безопасными. Кроме того, если указатель функции содержит только ссылку на определенную функцию, делегат состоит из ссылки на объект и ссылается на один или несколько методов в объекте.
Эта модель событий использует делегатов для привязки событий к методам, используемым для их обработки. Делегат позволяет другим классам регистрировать уведомления о событиях, указывая метод обработчика. При возникновении события делегат вызывает привязанный метод. Дополнительные сведения об определении делегатов см. в разделе События.
Делегаты могут быть привязаны к одному методу или к нескольким методам, что называется мультикастингом. При создании делегата для события, вы или Windows, как правило, создаете многоадресное событие. Редкое исключение может быть событием, которое приводит к определенной процедуре (например, отображению диалогового окна), которая не будет логически повторяться несколько раз на событие. Сведения о том, как создать делегата многоадресной рассылки, см. в Как объединить делегаты (многоадресные делегаты).
Делегат многоадресной рассылки поддерживает список вызовов методов, к которым он привязан. Делегат многоадресной рассылки поддерживает метод Combine для добавления метода в список вызовов и метода Remove для его удаления.
Когда событие записывается приложением, элемент управления вызывает событие путем вызова делегата для этого события. Делегат в свою очередь вызывает привязанный метод. В наиболее распространенном случае (многоканальный делегат) делегат поочередно вызывает каждый связанный метод в списке вызова, обеспечивая уведомление "один ко многим". Эта стратегия означает, что элемент управления не должен поддерживать список целевых объектов для уведомления о событиях, делегат обрабатывает все регистрации и уведомления.
Делегаты также позволяют привязывать несколько событий к одному методу, обеспечивая множественное уведомление. Например, событие нажатия кнопки и событие нажатия меню может вызывать один и тот же делегат, который затем вызывает один метод для обработки этих отдельных событий так же.
Механизм привязки, используемый с делегатами, является динамическим: делегат может быть привязан во время выполнения к любому методу, подпись которого соответствует обработчику событий. С помощью этой функции можно настроить или изменить привязанный метод в зависимости от условия и динамически подключить обработчик событий к элементу управления.
См. также
- Создание обработчиков событий в Windows Forms
- Обзор обработчиков событий
.NET Desktop feedback