Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Событие — это действие, на которое можно реагировать или "обрабатывать" в коде. События обычно создаются действием пользователя, например щелчком мыши или нажатием клавиши, но их также можно создать с помощью кода программы или системы.
Приложения, управляемые событиями, выполняют код в ответ на событие. Каждая форма и элемент управления предоставляют предопределенный набор событий, на которые можно реагировать. Если возникает одно из этих событий и есть связанный обработчик событий, обработчик вызывается и выполняется код.
Типы событий, создаваемые объектом, различаются, но многие типы являются общими для большинства элементов управления. Например, большинство объектов имеют Click событие, которое возникает, когда пользователь щелкает его.
Замечание
Многие события происходят наряду с другими событиями. Например, в ходе события DoubleClick происходят события MouseDown, MouseUpи Click.
Общие сведения о том, как создавать и использовать событие, см. в разделе "Обработка и создание событий в .NET".
Делегаты и их роль
Делегаты — это классы, часто используемые в .NET для создания механизмов обработки событий. Делегаты примерно приравниваются к указателям функций, часто используемым в Visual C++ и других объектно-ориентированных языках. В отличие от указателей функций, делегаты обладают объектно-ориентированностью, типобезопасностью и безопасностью. Кроме того, где указатель функции содержит только ссылку на определенную функцию, делегат состоит из ссылки на объект и ссылки на один или несколько методов в объекте.
Эта модель событий использует делегатов для привязки событий к методам, используемым для их обработки. Делегат позволяет другим классам регистрировать уведомления о событиях, указывая метод обработчика. При возникновении события делегат вызывает привязанный метод. Дополнительные сведения о том, как определить делегатов, см. в разделе Обработка и генерация событий.
Делегаты могут быть привязаны к одному методу или к нескольким методам, что называется мультикастингом. При создании делегата для события обычно создается мультиметодное событие. Редкое исключение может быть событием, которое приводит к определенной процедуре (например, отображению диалогового окна), которая не будет логически повторяться несколько раз на событие. Сведения о создании многопотокового делегата см. в способах объединения делегатов (многопотоковые делегаты).
Делегат многоадресной рассылки поддерживает список вызовов методов, к которым он привязан. Делегат многоадресной рассылки поддерживает метод Combine для добавления метода в список вызовов и метода Remove для его удаления.
Когда событие записывается приложением, элемент управления вызывает событие путем вызова делегата для этого события. Делегат в свою очередь вызывает привязанный метод. В наиболее распространённом случае (многоадресный делегат) делегат вызывает каждый связанный метод в списке вызовов по очереди, что обеспечивает уведомление "от одного ко многим". Эта стратегия означает, что элемент управления не должен поддерживать список целевых объектов для уведомления о событиях, поскольку делегат берет на себя обработку всех регистраций и рассылку уведомлений.
Делегаты также позволяют привязывать несколько событий к одному методу, обеспечивая множественное уведомление. Например, событие нажатия кнопки и событие нажатия меню может вызывать один и тот же делегат, который затем вызывает один метод для обработки этих отдельных событий так же.
Механизм привязки, используемый с делегатами, является динамическим: делегат может быть привязан во время выполнения к любому методу, подпись которого соответствует обработчику событий. С помощью этой функции можно настроить или изменить привязанный метод в зависимости от условия и динамически подключить обработчик событий к элементу управления.
События в Windows Forms
События в Windows Forms объявляются делегатом EventHandler<TEventArgs> для методов обработчика. Каждый обработчик событий предоставляет два параметра, которые позволяют правильно обрабатывать событие. В следующем примере показан обработчик событий для события Button элемента управления Click.
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
End Sub
private void button1_Click(object sender, System.EventArgs e)
{
}
Первый параметр,sender
, предоставляет ссылку на объект, который вызвал событие. Второй параметр, e
, передает объект, характерный для обрабатываемого события. Обращаясь к свойствам объекта (а иногда и к его методам), можно получить информацию о таких вещах, как расположение мыши для событий мыши или данных, передаваемых в событиях drag-and-drop.
Обычно каждое событие создает обработчик событий с другим типом объекта события для второго параметра. Некоторые обработчики событий, например для событий MouseDown и MouseUp, имеют тот же тип объекта для второго параметра. Для этих типов событий можно использовать один и тот же обработчик событий для обработки обоих событий.
Вы также можете использовать один и тот же обработчик событий для обработки одного и того же события для различных элементов управления. Например, если у вас есть группа RadioButton элементов управления в форме, можно создать один обработчик событий для Click каждого события RadioButton
. Дополнительные сведения см. в разделе "Обработка события элемента управления".
Связанный контент
.NET Desktop feedback