Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 181

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 175 176 177 178 179 180 < 181 > 182 183 184 185 186 187 .. 404 >> Следующая


Добавление специально созданного обработчика событий

Если требуется создать событие, которого не существует ии в одном из базовых классов, то придется выполнить несколько более серьезную работу. Мы создадим событие с именем Positionchanged (позиция изменена), которое будет возникать, когда изменяется значенне свойства Position.

Для создания такого события потребуется три вещи:

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

? Пользователь должен обладать возможностью подписаться на событие посредством привязки к нему некоторого метода.

? Мы должны вызвать метод, который пользователь привязал

к данному событию. .

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

public event System.EventHandler Positionchanged;

П Конструктор public ctlLabelTexbox()

<

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

public PositionEnum Position (

get

{

return mPosition;

}

- set

(

mPosition = value;

MoveControle () i .

if (Positionchanged 1- null) // Убеждаемся в наличии подписчиков

I

// Получаем список методов, которые необходимо вызвать System.Delegate[] subscribers ¦ Positionchanged.GetInvocationLiatОj

II Проходик в цикле по всем методам foreach (System.EventHandler target in subscriberв) f_

target(this, new EventArgs[))I If Выбываем очередной метод

) .

: Ш ШШЛ 9 :

)

)

Сначала нужно убедиться в наличии каких-либо подписчиков на данное событие, проверяя, не равняется лн значенне Positionchanged null. Еслн нет, то мы вызываем метод GetinvocationList, который позволяет получить список делегатов,
384

Глава 14

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

Подписка на созданное нами событие осуществляется в конструкторе проекта LebelTextЬохТеэt:

public FormlO (

//

// Требуется для поддержки Windows Form Designer

//

InitializeComponent();

nyControl. PoeitionChanged +•= new .

EventHandler (this.#ryCantrol_PositionChan<jed) i '

Теперь можно откомпилировать и запустить тестовое приложение, содержащее созданный нами пользовательский управляющий элемент. Указанное приложение содержит также кнопку, которая изменяет внешний вид управляющего элемента, устанавливая н переустанавливая свойство Position, выводя при этом о*но с сообщением.

Полный текст программ данного проекта может быть найден на web сайте издательства Wrox.

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

Итоги

В настоящей главе мы начали с того, на чем остановились в предыдущей, — с изучения управляющих элементов MainMenu и Toolbar. Мы познакомились с тем, каким образом можно создавать MDI- и SDI-приложения и каким образом q этих приложениях могут использоваться меню н панели инструментов. Затем мы перешли к созданию своих собственных управляющих элементов, к разработке их свойств, пользовательского интерфейса и событий для таких управляющих элементов.
Дополнительные возможности Windows Form_______________________________________385

В следующей главе обсуждение Windows Forms будет завершено рассмотрением одной особой разновидности формы, которая известна нам пока только по названию — Windows Common Dialog.

Упражнение

1. Используя пример LabelTextbox в качестве основы, создайте новое свойство с именем MaxLength (максимальная длина) для хранения максимально допустимого количества символов, которые могут находиться в текстовом окне. Затем создайте два новых события с именами MaxLengthChanged (максимальная длина изменена) и MaxLengthReached (максимальная длина достигнута). Событие MaxLengthChanged должно возникать при изменении значения свойства, а событие MaxLengthReached — В ТОТ МОМеИТ, когда пользователь вводит символ, с учетом которого длина текста в текстовом окне становится равной значению MaxLength.
Использование диалоговых окон

В предыдущей главе мы узнали, каким образом можно реализовывать меню, панелн инструментов, SDI- н MDI-формы и т. д. Кроме того, мы знаем, как создавать простые диалоговые окна, чтобы получать информацию от пользователя. Мы также создали достаточно сложные диалоговые окна, чтобы запрашивать у пользователя более специфическую информацию. Однако для выполнения стандартных операций, таких как открытие и сохранение файлов, вывод на печать, рекомендуется использовать заранее созданный класс диалоговых окон. В этом случае не только уменьшается объем кода, но и используются стандартные, хорошо всем знакомые диалоговые окна Windows. В .NET Framework имеются классы, которые позволяют использовать диалоговые окна Windows для открытия и сохранения файлов, для вывода на принтер, а также для выбора цвета н шрифта. Их использование позволяет пользователю не изучать сложную методологию, что было бы совершенно необходимым для кодирования таких функциональных возможностей с “нуля".
Предыдущая << 1 .. 175 176 177 178 179 180 < 181 > 182 183 184 185 186 187 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.