Обработчик события обязан выглядеть следующим образом:
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(); } } }