Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

Параметр

sender
предоставляет ссылку на элемент управления, который порождает событие. Чтобы добраться до свойства
DynamicId
, необходимо преобразовать его в тип
DynamicButton
. Параметр е определяет некоторые специальные аргументы события. Мы не собираемся это здесь рассматривать, но для некоторых событий в данных аргументах содержится дополнительная информация о том, что вызывает событие. Вот обработчик нажатия кнопки:

// DynamicButton_Click ...

protected void DynamicButton_Click(object sender, System.EventArgs e) {

 // преобразовать sender в button ...

 DynamicButton button = (DynamicButton)sender;

 // msgbox ...

 AddToLog("Clicked" + button.DynamicId);

}

В этом методе нет ничего необычного. Соединим его с событием Click нашей динамической кнопки. Непосредственно перед тем как вызывать

Controls.Add
, можно добавить обработчик:

// соединить обработчик ...

newButton.Click += new System.EventHandler(this.DynamicButton_Click);

// добавить кнопку к форме ...

this.Controls.Add(newButton);

Теперь, когда возникает связанное с кнопкой событие

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

Важная деталь — в .NET события могут иметь более одного обработчика. Это означает, что если создать другой делегированный метод, соединить его с помощью нового экземпляра

System.EventHandler
, то оба метода будут вызываться в момент порождения события. Конечно, методы не вызываются одновременно, так как фактически получится мультипоточное приложение, а это не то, что хотелось бы случайно получить.

Мы не определили, как выглядит наша функция

AddToLog
,— сделаем это сейчас:

// AddToLog — обновляет представление журнала ...

private void AddToLog(String buf) {

 // обновляет элемент управления журнала ...

 txtLog.Text = (buf + "\r\n" + txtLog.Text);

}

Теперь давайте попробуем выполнить приложение и понажимать на кнопки:

Другие обработчики

Обработчики, которые отвечают на другие события в

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

// DynamicButton_Enter ...

protected void DynamicButton_Enter(object sender, System.EventArgs e) {

 // преобразовать sender в button ...

 DynamicButton button = (DynamicButton)sender;

 // msgbox ...

 AddToLog("Enter " + button.DynamicId);

}

// DynamicButton_Leave ...

protected void DynamicButton_Leave(object sender, System.EventArgs e) {

 // преобразовать sender в button ...

 DynamicButton button = (DynamicButton)sender;

 // msgbox ...

 AddToLog("Left " + button.DynamicId);

}

Затем можно добавить обработчики для каждого из них:

// соединить обработчик

newButton.Click +=

 new System.EventHandler(this.DynamicButton_Click);

newButton.MouseEnter +=

 new System.EventHandler(this.DynamicButton_Enter);

newButton.MouseLeave +=

 new System.EventHandler(this.DynamicButton_Leave);

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

Другой пример

Разобрав пример создания динамических элементов управления, давайте посмотрим, как эта техника может использоваться в приложениях.

Динамические элементы управления можно использовать для настройки интерфейса пользователя приложения в зависимости от некоторых данных среды выполнения. Классическим примером этого является добавление новых возможностей в панель инструментов, когда в каталог приложения вносятся новые дополнительные средства (plug-ins) или модули. Например, установка Adobe Acrobat на компьютере может автоматически добавлять в панель инструментов Word кнопку для создания документа Acrobat.

  • Читать дальше
  • 1
  • ...
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: