Программирование на языке си ( с ) | C Sharp (Си шарп) с нуля. Сортировки | Массивы | Функции

События ( обработчик событий | делегат eventhandler )

В современном мире компьютеров большинство программ выполняется нелинейно. Т.е. существуют такие ситуации, решение которых нужно выполнять, дождавшись определенного события.

Поэтому приложения Windows выполняются посредством отправки сообщений. В каждом сообщении находится указание, что именно нужно делать дальше. Ранее, разработчикам самим приходилось думать над тем, как именно будут обрабатываться сообщения.

   События

Среда .NET обрабатывает эти сообщения механизмом называемым - события. И так, событие - это отправление сообщения о том, что объектом совершено какое-то действие. Давайте приведем примеры событий:

  1. нажатие кнопки
  2. загрузка формы
  3. тиканье таймера

Событие может получать любой объект, которому надо знать, когда что-то произойдет. Но поднимается вопрос о том, а кто же, собственно, будет отправлять сообщение о наступлении события. Задача отправителя - сгенерировать событие. Обычно отправителем выступают приложение, система .NET.

При обработке какого-либо события отправитель не знает, кто именно обработает это событие. Далее, вступают в бой делегаты.

Отправитель события определяет делегат, который подходит по сигнатуре. Получатель должен зарегистрировать обработчик события. Давайте опять же обратимся к примеру:

  1. создаем метод обработчик события:
  2. private void button1_Click(object sender, EventArgs e)
    {
       тело функции
    }

    Эта сигнатура является стандартной. Т.е. первый параметр object ссылается на объект, который сгенерировал данное событие. Второй - содержит информацию о событии.

  3. регистрируем обработчик этого метода:
  4. this.button1.Click += new System.EventHandler(this.button1_Click);

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

Давайте создадим для ясности приложение WindowsForms и сгенерируем событие нажатие кнопки, которое будет выводить сообщение: "Кнопка нажата!":

создаем макет и с помощью панели элементов; перетаскиваем кнопку на нашу форму демонстрация вызова осбытия

private void button1_Click(object sender, EventArgs e)
{
   MessageBox.Show("Кнопка нажата!");
}

щелкаем двойным щелчком мыши по кнопке на форме и дополняем сгенерировавшийся код

О том, как создавать собственные события вы узнаете в следующей статье. А пока, для закрепления текущего материала, советую потренироваться на кошках в использовании встроенных средой .NET событий.

При копировании ( использовании ) материала размещайте ссылку на сайт www.mir-koda.ru