Обработчик события обязан выглядеть следующим образом:
public void OnClick(object sender, EventArgs a) {
// обработка события
}
Обработчик события не может возвращать ничего кроме void, отсутствуют механизмы возврата значения. Все что можно сделать – вызвать метод. Sender – ссылка на объект, который сгенерировал событие (генератор события передает ссылка на самого себя). Параметр а должен быть ссылкой либо на базовый класс System.EventArgs (общий базовый класс для всех уведомлений о произошедших событиях), либо на производный класс. Производный класс может содержать дополнительную информацию о событии, например местоположение мыши, клавиша нажатая на клавиатуре.
Пример обработки событий:
using System;
namespace MyPrimer.Events
{
// мой клас для передачи болле детальных сведений о событии
public class CatEventArgs : EventArgs
{
public string CatName;
public CatEventArgs(string initCatName) :base()
{
CatName = initCatName;
}
}
// описываем класс который будет просто содержать метод
// обработчик нашего события CatIsSeekEvent
public class Seek
{
// обработчик события
public void OnCatSeek(object sender, CatEventArgs e)
{
Console.WriteLine("Только что кот " + e.CatName + " заболел!");
}
}
// мой класс будет (может) генерировать событие MyEvent
public class Cat
{
public string name;
// делегат, в котором будет храниться даресс метода
// который будет автоматически вызиваться при возникновении события
public delegate void EventDelegate (object sender, CatEventArgs e);
// описсываем событие (на основе делегата)
public event EventDelegate CatIsSeekEvenet;
// метод, предназначенный для активизации обработчика событий
public void Activate_CatIsSeekEvent()
{
// задан ли обработчик события?
if (CatIsSeekEvenet != null)
{
// если содержится ссылка на обработчик
// то происходит генерация события и вызов обработчика
CatIsSeekEvenet(this, new CatEventArgs(name));
}
}
}
// -----
public class myProgram
{
public static void Main()
{
Seek seek = new Seek();
Cat Frisky = new Cat();
Frisky.name = "Frisky";
// сообщаем что желаем получать уведомления о событиях
// задаем обработчик
Frisky.CatIsSeekEvenet += new Cat.EventDelegate(seek.OnCatSeek);
// вызов события. событие вызывает объект Frisky (this)
// и передает информацию о событии
Frisky.Activate_CatIsSeekEvent();
Console.ReadKey();
}
}
}
