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

Событие — это действие, требующее реагирования или "обработки" в коде.An event is an action which you can respond to, or "handle," in code. События могут генерироваться действиями пользователя (например, нажатием кнопки мыши или клавиши на клавиатуре), программным кодом или системой.Events can be generated by a user action, such as clicking the mouse or pressing a key; by program code; or by the system.

Приложения, управляемые событиями, выполняют код в ответ на событие.Event-driven applications execute code in response to an event. Каждая форма и элемент управления имеют предопределенный набор событий, который можно запрограммировать.Each form and control exposes a predefined set of events that you can program against. Если возникает такое событие, а в соответствующем обработчике событий имеется код, этот код выполняется.If one of these events occurs and there is code in the associated event handler, that code is invoked.

Типы порождаемых объектом событий могут варьироваться, но многие их них стандартны для большинства элементов управления.The types of events raised by an object vary, but many types are common to most controls. Например, большинство объектов обработают событие Click.For example, most objects will handle a Click event. Если пользователь откроет форму, в форме сработает код обработчика события Click.If a user clicks a form, code in the form's Click event handler is executed.

Примечание

Многие события возникают вместе с другими событиями.Many events occur in conjunction with other events. Например, при возникновении события DoubleClick возникают также события MouseDown, MouseUp и Click.For example, in the course of the DoubleClick event occurring, the MouseDown, MouseUp, and Click events occur.

Сведения о том, как вызывать и получать события, см. в разделе события.For information about how to raise and consume an event, see Events.

Делегаты и их ролиDelegates and Their Role

Делегаты — это классы, обычно используемые в .NET Framework для построения механизмов обработки событий.Delegates are classes commonly used within the .NET Framework to build event-handling mechanisms. Делегаты напоминают указатели функций, обычно используется в визуальном элементе C++ и других объектно ориентированных языках.Delegates roughly equate to function pointers, commonly used in Visual C++ and other object-oriented languages. В отличие от указателей функций делегаты объектно-ориентированы, типобезопасны и безопасны.Unlike function pointers however, delegates are object-oriented, type-safe, and secure. К тому же, если указатель функций содержит только ссылку на определенную функцию, то делегат содержит ссылку на объект и ссылки на один или несколько методов в этом объекте.In addition, where a function pointer contains only a reference to a particular function, a delegate consists of a reference to an object, and references to one or more methods within the object.

Эта модель событий использует делегаты для привязки событий к методам, которые используются для их обработки.This event model uses delegates to bind events to the methods that are used to handle them. Делегаты позволяют другим классам записывать уведомление о событии, определяя метод обработки.The delegate enables other classes to register for event notification by specifying a handler method. При возникновении события делегат вызывает соответствующий метод.When the event occurs, the delegate calls the bound method. Дополнительные сведения об определении делегатов см. в разделе события.For more information about how to define delegates, see Events.

Делегаты можно связать с одним или несколькими методами, создав так называемую многоадресную рассылку.Delegates can be bound to a single method or to multiple methods, referred to as multicasting. При создании делегата для события, вы (или Windows) обычно создается событие многоадресной рассылки.When creating a delegate for an event, you (or the Windows) typically create a multicast event. Редким исключением является событие, вызывающее выполнение определенной процедуры (например, отображение диалогового окна), которая не будет логически повторяться несколько раз за событие.A rare exception might be an event that results in a specific procedure (such as displaying a dialog box) that would not logically repeat multiple times per event. Сведения о том, как создать многоадресный делегат, см. в разделе как: Объединение делегатов (многоадресные делегаты).For information about how to create a multicast delegate, see How to: Combine Delegates (Multicast Delegates).

Делегат многоадресной рассылки поддерживает список вызова методов, к которым он привязан.A multicast delegate maintains an invocation list of the methods it is bound to. Делегат многоадресной рассылки поддерживает метод Combine, позволяющий добавить метод в список вызова, и метод Remove, позволяющий его удалить.The multicast delegate supports a Combine method to add a method to the invocation list and a Remove method to remove it.

Когда приложение регистрирует событие, элемент управления порождает это событие, вызывая для него делегат.When an event is recorded by the application, the control raises the event by invoking the delegate for that event. Делегат, в свою очередь, вызывает соответствующий метод.The delegate in turn calls the bound method. В самом распространенном случае (делегат многоадресной рассылки) делегат вызывает каждый метод связки из списка вызова по очереди, что обеспечивает уведомление один-ко-многим.In the most common case (a multicast delegate) the delegate calls each bound method in the invocation list in turn, which provides a one-to-many notification. Данная стратегия означает, что элементу управления не нужно вести список целевых объектов для уведомления о событии, поскольку записью и уведомлением занимается делегат.This strategy means that the control does not need to maintain a list of target objects for event notification—the delegate handles all registration and notification.

Делегаты также позволяют связать с одним методом несколько событий, чтобы использовать уведомление по типу многие-к-одному.Delegates also enable multiple events to be bound to the same method, allowing a many-to-one notification. Например, событие нажатия на кнопку и событие выбора команды в меню вызывают один и тот же делегат, который вызывает один и тот же метод, обрабатывающий эти события одинаковым образом.For example, a button-click event and a menu-command–click event can both invoke the same delegate, which then calls a single method to handle these separate events the same way.

В делегатах используется динамический механизм связки: во время выполнения делегат может быть связан с любым методом, подпись которого совпадает с подписью обработчика событий.The binding mechanism used with delegates is dynamic: a delegate can be bound at run time to any method whose signature matches that of the event handler. С помощью этой функции можно устанавливать или изменять метод связки в зависимости от условий и динамически привязывать обработчик событий к элементу управления.With this feature, you can set up or change the bound method depending on a condition and to dynamically attach an event handler to a control.

См. такжеSee also