How to: Subscribe to and Unsubscribe from Events



You subscribe to an event that is published by another class when you want to write custom code that is called when that event is raised. For example, you might subscribe to a button's click event in order to make your application do something useful when the user clicks the button.

To subscribe to events by using the Visual Studio IDE

1. If you cannot see the Properties window, in Design view, right-click the form or control for which you want to create an event handler, and select Properties.

2. On top of the Properties window, click the Events icon.

3. Double-click the event that you want to create, for example the Load event.

Visual C# creates an empty event handler method and adds it to your code. Alternatively you can add the code manually in Code view. For example, the following lines of code declare an event handler method that will be called when the Form class raises the Load event.

private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling code here. }

The line of code that is required to subscribe to the event is also automatically generated in the InitializeComponent method in the Form1.Designer.cs file in your project. It resembles this:

this.Load += new System.EventHandler(this.Form1_Load);

 


Подписка и отмена подписки на события

Необходимость подписки на событие, опубликованное другим классом, может возникнуть, когда требуется написать пользовательский код, вызываемый при инициировании такого события. Например, можно подписаться на событие кнопки click, чтобы приложение выполняло некоторое действие при нажатии пользователем на кнопку.

Подписка на события в среде IDE Visual Studio

1. Если окно Свойства закрыто, в представлении Конструктор щелкните правой кнопкой мыши форму или элемент управления, для которого требуется создать обработчик событий, и выберите пункт Свойства.

2. Вверху окна Свойства щелкните значок События.

3. Дважды щелкните событие, которое требуется создать, например событие Load.

Visual C# создаст пустой метод обработчика событий и добавит его в код. Код можно также добавить вручную в представлении Код. Например, следующие строки кода объявляют метод обработчика событий, который будет выполнен при инициировании классом Form события Load.

private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling code here. }

Строка кода, которая требуется для подписки на событие, также создается автоматически в методе InitializeComponent в файле Form1.Designer.cs проекта. Она имеет следующий вид.

this.Load += new System.EventHandler(this.Form1_Load);

 


To subscribe to events programmatically

1. Define an event handler method whose signature matches the delegate signature for the event. For example, if the event is based on the EventHandler delegate type, the following code represents the method stub:

void HandleCustomEvent(object sender, EventArgs a) { // Do something useful here. }

2. Use the addition assignment operator (+=) to attach your event handler to the event. In the following example, assume that an object named publisher has an event named RaiseCustomEvent. Note that the subscriber class needs a reference to the publisher class in order to subscribe to its events.

publisher.RaiseCustomEvent += HandleCustomEvent;

3. Note that the previous syntax is new in C# 2.0. It is exactly equivalent to the C# 1.0 syntax in which the encapsulating delegate must be explicitly created by using the new keyword:

publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

4. An event handler can also be added by using a lambda expression:

public Form1() { InitializeComponent(); // Use a lambda expression to define an event handler. this.Click += (s,e) => { MessageBox.Show(   ((MouseEventArgs)e).Location.ToString());}; }

 


Подписка на события программными средствами

1. Определите метод обработчика событий, подпись которого соответствует подписи делегата для события. Например, если событие основано на типе делегата EventHandler, то следующий код представляет заглушку метода:

void HandleCustomEvent(object sender, EventArgs a) { // Do something useful here. }

2. Чтобы присоединить обработчик событий к событию, используйте оператор назначения сложения (+=). В следующем примере предположим, что объект с именем publisher имеет событие с именем RaiseCustomEvent. Обратите внимание, что для класса подписчика требуется ссылка на класс издателя, чтобы подписаться на его события.

publisher.RaiseCustomEvent += HandleCustomEvent;

3. Обратите внимание, что предыдущий синтаксис является нововведением в языке C# версии 2.0. Он в точности соответствует синтаксису C# 1.0, в котором при помощи ключевого слова new должен быть явно создан инкапсулирующий делегат.

publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

4. Для добавления обработчика событий можно также использовать лямбда-выражение.

ß---

Дополнительные сведения см. в разделе Использование лямбда-выражений вне LINQ.


Дата добавления: 2019-03-09; просмотров: 262; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!