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