Общие сведения о событиях (Windows Forms)

Обновлен: Ноябрь 2007

Событие — это действие, на которое можно ответить (или которое можно обработать) с помощью кода. События возникают в результате действий пользователя, например при щелчке мышью или при нажатии клавиши, а также при выполнении программного кода или операций системы.

Приложения, работающие на основе событий, в ответ на событие выполняют код. Для каждой формы и элемента управления предоставляется стандартный набор событий, которые могут быть запрограммированы. Если произойдет одно из этих событий, вызывается код, если он существует в соответствующем обработчике событий.

Типы событий, вызываемых объектами, различны, но многие типы являются общими для большинства элементов управления. Например, большинство объектов будет обрабатывать событие Click. Если пользователь щелкает форму, выполняется код в обработчике событий Click формы.

1h12f09z.alert_note(ru-ru,VS.90).gifПримечание.

Большинство событий возникают в сочетании с другими событиями. Например, в процессе выполнения события DoubleClick происходят события MouseDown, MouseUp и Click.

Сведения о том, как вызывать и получать события, см. в разделе Практическое руководство. Вызов и прием событий. Пример того, как соединить обработчики событий и методы, см. в разделе Практическое руководство. Соединение методов обработчика событий с событиями.

Делегаты и их роль

Делегаты — это классы, часто используемые в среде .NET Framework для построения механизмов обработки событий. Делегаты можно грубо сравнить с указателями функций, обычно используемыми в языке Visual C++ и других объектно-ориентированных языках. В отличие от указателей функций делегаты объектно ориентированы, строго типизированы и безопасны. Помимо этого, если указатель функции содержит только ссылку на определенную функцию, то делегат состоит из ссылки на объект и ссылок на один или несколько методов этого объекта.

Эта модель событий использует делегаты для привязки событий к методам, которые используются для обработки событий. Делегаты позволяют другим классам зарегистрироваться для получения уведомления о событии посредством определения метода обработки. Когда возникает событие, делегат вызывает связанный метод. Дополнительные сведения о том, как определять делегаты, см. в разделе События и делегаты.

Делегаты можно привязать к одному или нескольким методам, как при многоадресной передаче. При создании делегата для события пользователь (или конструктор Windows Forms Designer) обычно создает групповое событие. Редким исключением является событие, приводящее к выполнению определенной процедуры (например, отображения диалогового окна), которая не может повториться несколько раз за событие. Сведения о создании группового делегата см. в разделе Практическое руководство. Объединение делегатов (многоадресные делегаты) (руководство по программированию в C#).

Групповой делегат обслуживает список вызова методов, к которому он привязан. Групповой делегат поддерживает метод Combine для добавления метода к списку вызова и метод Remove для удаления из него.

Когда событие записывается приложением, элемент управления вызывает событие путем вызова делегата для этого события. Делегат, в свою очередь, вызывает связанный метод. В самом общем случае делегат (групповой делегат) последовательно вызывает каждый связанный метод из списка вызова и обеспечивает уведомление "один-ко-многим". При такой стратегии элемент управления не должен поддерживать список целевых объектов для получения уведомления о событии — регистрацию и уведомления обрабатывает делегат.

Делегаты также поддерживают привязку нескольких событий к одному методу — это называется уведомлением "многие-к-одному". Например, событие, возникающее при нажатии кнопки, и событие, возникающее при щелчке команды меню, могут использовать один и тот же делегат, который затем вызовет один метод для идентичной обработки этих разных событий.

Для делегатов используется динамический механизм привязки — делегат можно привязать во время выполнения к любому методу, чья подпись совпадает с подписью обработчика событий. Данная возможность позволяет задавать или изменять связанный метод в зависимости от состояний и динамически присваивать элементу управления обработчик событий.

См. также

Основные понятия

Обзор обработчиков событий (Windows Forms)

Другие ресурсы

Создание обработчиков событий в Windows Forms