- Создание обработчиков событий в Windows Forms Creating Event Handlers in Windows Forms
- в этом разделе In This Section
- Связанные разделы Related Sections
- Обзор обработчиков событий (Windows Forms) Event Handlers Overview (Windows Forms)
- Практическое руководство. Создание обработчиков событий для Windows Forms во время выполнения How to: Create Event Handlers at Run Time for Windows Forms
- Создание обработчика событий во время выполнения Create an event handler at run time
- Общие сведения о событиях (Windows Forms .NET) Events overview (Windows Forms .NET)
- Делегаты и их роли Delegates and their role
Создание обработчиков событий в Windows Forms Creating Event Handlers in Windows Forms
Обработчик событий — это процедура в коде, определяющая, какие действия должны выполняться при возникновении тех или иных событий, например, если пользователь нажимает кнопку или сообщение поступает в очередь. An event handler is a procedure in your code that determines what actions are performed when an event occurs, such as when the user clicks a button or a message queue receives a message. При порождении события запускается получивший его обработчик или несколько обработчиков. When an event is raised, the event handler or handlers that receive the event are executed. События могут назначаться сразу нескольким обработчикам, а методы, которые управляют конкретными событиями, можно изменять динамически. Events can be assigned to multiple handlers, and the methods that handle particular events can be changed dynamically. Для создания обработчиков событий также можно использовать конструктор Windows Forms в Visual Studio. You can also use the Windows Forms Designer in Visual Studio to create event handlers.
в этом разделе In This Section
Общие сведения о событиях Events Overview
Объясняет модель событий и роли делегатов. Explains the event model and the role of delegates.
Общие сведения об обработчиках событий Event Handlers Overview
Описывает порядок обработки событий. Describes how to handle events.
Практические руководства. Создание обработчиков событий во время выполнения для Windows Forms How to: Create Event Handlers at Run Time for Windows Forms
Динамически выдает инструкции по реагированию на системные или пользовательские события. Gives directions for responding to system or user events dynamically.
Как подключить несколько событий к одному обработчику событий в Windows Forms How to: Connect Multiple Events to a Single Event Handler in Windows Forms
Выдает инструкции по назначению одной и той же функциональности нескольким элементам управления с помощью событий. Gives directions for assigning the same functionality to multiple controls through events.
Порядок событий в Windows Forms Order of Events in Windows Forms
Описывает порядок порождения событий в элементах управления Windows Forms. Describes the order in which events are raised in Windows Forms controls.
Инструкции. Создание обработчиков событий с помощью конструктора Описывает, как использовать конструктор Windows Forms для создания обработчиков событий. How to: Create Event Handlers Using the Designer Describes how to use the Windows Forms Designer to create event handlers.
Связанные разделы Related Sections
Событиях Events
Содержит ссылки на разделы, посвященные обработке и вызову событий с помощью .NET Framework. Provides links to topics on handling and raising events using the .NET Framework.
Устранение неполадок унаследованных обработчиков событий в Visual Basic Troubleshooting Inherited Event Handlers in Visual Basic
Представляет распространенные проблемы, возникающие у обработчиков событий в наследуемых компонентах. Lists common issues that occur with event handlers in inherited components.
Обзор обработчиков событий (Windows Forms) Event Handlers Overview (Windows Forms)
Обработчик событий — это метод, привязанный к событию. An event handler is a method that is bound to an event. При возникновении события выполняется код в обработчике событий. When the event is raised, the code within the event handler is executed. Каждый обработчик событий предоставляет два параметра, которые позволяют правильно управлять событием. Each event handler provides two parameters that allow you to handle the event properly. В следующем примере показан обработчик событий для Button события элемента управления Click . The following example shows an event handler for a Button control’s Click event.
Первый параметр, sender предоставляет ссылку на объект, который вызвал событие. The first parameter, sender , provides a reference to the object that raised the event. Второй параметр, e , в приведенном выше примере, передает объект, относящийся к обрабатываемому событию. The second parameter, e , in the example above, passes an object specific to the event that is being handled. Ссылаясь на свойства объекта (и иногда его методы), можно получить такие сведения, как расположение мыши для событий мыши или данных, передаваемых в событиях перетаскивания. By referencing the object’s properties (and, sometimes, its methods), you can obtain information such as the location of the mouse for mouse events or data being transferred in drag-and-drop events.
Обычно каждое событие создает обработчик событий с другим типом объекта события для второго параметра. Typically each event produces an event handler with a different event-object type for the second parameter. Некоторые обработчики событий, например MouseDown MouseUp события и, имеют один и тот же тип объекта для второго параметра. Some event handlers, such as those for the MouseDown and MouseUp events, have the same object type for their second parameter. Для этих типов событий можно использовать один и тот же обработчик событий для обработки обоих событий. For these types of events, you can use the same event handler to handle both events.
Можно также использовать один и тот же обработчик событий для обработки одного и того же события для различных элементов управления. You can also use the same event handler to handle the same event for different controls. Например, если RadioButton в форме имеется группа элементов управления, можно создать один обработчик событий для Click события и связать событие каждого элемента управления Click с одним обработчиком событий. For example, if you have a group of RadioButton controls on a form, you could create a single event handler for the Click event and have each control’s Click event bound to the single event handler. Дополнительные сведения см. в разделе руководство. Подключение нескольких событий к одному обработчику событий в Windows Forms. For more information, see How to: Connect Multiple Events to a Single Event Handler in Windows Forms.
Практическое руководство. Создание обработчиков событий для Windows Forms во время выполнения How to: Create Event Handlers at Run Time for Windows Forms
Помимо создания событий с помощью конструктор Windows Forms в Visual Studio можно также создать обработчик событий во время выполнения. In addition to creating events using the Windows Forms Designer in Visual Studio, you can also create an event handler at run time. Это позволит подключать обработчики событий в зависимости от условий в коде во время выполнения, а не при начальном запуске программы. This action allows you to connect event handlers based on conditions in code at run time as opposed to having them connected when the program initially starts.
Создание обработчика событий во время выполнения Create an event handler at run time
Откройте форму, в которую нужно добавить обработчик событий. Open the form that you want to add an event handler to.
Добавьте метод в форму с сигнатурой метода для события, которое будет необходимо обрабатывать. Add a method to your form with the method signature for the event that you want to handle.
Например, при обработке Click события Button элемента управления необходимо создать метод, подобный следующему: For example, if you were handling the Click event of a Button control, you would create a method such as the following:
Добавьте код в обработчик событий в зависимости от приложения. Add code to the event handler as appropriate to your application.
Определите форму или элемент управления, для которого необходимо создать обработчик событий. Determine which form or control you want to create an event handler for.
В методе внутри класса формы добавьте код, в соответствии с которым обработчик событий будет обрабатывать событие. In a method within your form’s class, add code that specifies the event handler to handle the event. Например, следующий код указывает обработчик событий button1_Click , обрабатывающий Click событие Button элемента управления: For example, the following code specifies the event handler button1_Click handles the Click event of a Button control:
Общие сведения о событиях (Windows Forms .NET) Events overview (Windows Forms .NET)
Событие — это действие, требующее реагирования или «обработки» в коде. An event is an action that 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.
Документация для Руководства по рабочему столу по .NET 5 (и .NET Core) находится в разработке. The Desktop Guide documentation for .NET 5 (and .NET Core) is under construction.
Приложения, управляемые событиями, выполняют код в ответ на событие. 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’s code an 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 Handling and raising events.
Делегаты и их роли Delegates and their role
Делегатами являются классы, которые обычно используются в .NET для построения механизмов обработки событий. Delegates are classes commonly used within .NET to build event-handling mechanisms. Делегаты напоминают указатели функций, активно применяемые в Visual 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. К тому же, если указатель функций содержит только ссылку на определенную функцию, то делегат содержит ссылку на объект и ссылки на один или несколько методов в этом объекте. Also, 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 Handling and raising events.
Делегаты можно связать с одним или несколькими методами, создав так называемую многоадресную рассылку. Delegates can be bound to a single method or to multiple methods, referred to as multicasting. При создании делегата для события вы обычно создаете событие многоадресной рассылки. When creating a delegate for an event, you 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 wouldn’t 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’s 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 doesn’t 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.