Программирование >>  Программирование с использованием ajax 

1 ... 166 167 168 [ 169 ] 170 171 172 ... 396


Для создания этого события требуется выполнение трех условий.

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

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

□ Мы должны вызвать метод, который пользователь присвоил событию.

Используемый делегат - EventHandler, предоставляемый каркасом .NET. Как было описано в главе 12, он представляет собой специальный вид делегата, объявляемый его собственным ключевым словом, event. Следующая строка объявляет событие и позволяет пользователю подписаться на него:

public event System.EventHandler PositionChanged;

Конструктор

public CtlLabelTextbox ()

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

public PositionEnum Position {

return mPosition;

set {

mPosition = value; MoveControls() ;

if (PositionChanged != null) Проверка наличия подписчиков {

PositionChanged(this, new EventArgs());

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

Подписка на новое нестандартное событие выполняется так же, как она выполнялась бы для любого другого, но при этом имеется небольшой нюанс: прежде чем событие будет отображено в окнах событий, необходимо построить элемент управления. После того как он построен, выберите элемент управления в форме в проекте Label Тех tboxTe St и дважды щелкните на событии PositionChanged в разделе Events (События) панели Properties. Затем добавьте следующий код в обработчик события:

private void ctlLabelTextboxl PositionChanged(object sender, EventArgs e) {

MessageBox.Show( Changed );

В действительности нестандартный обработчик события не делает ничего особенного - он просто указывает на то, что позиция изменилась.



Упражнения

1. Используя пример LabelTextbox в качестве фундамента, создайте новое свойство MaxLength, хранящее максимальное количество символов, которые могут быть введены в текстовом поле. Затем создайте два новых события MaxLengthChanged и MaxLengthReached. Событие MaxLengthChanged должно генерироваться при изменении свойства MaxLength, а событие MaxLengthReached - когда в результате ввода символом пользователем длина текста в текстовом поле становится равной значению свойства MaxLength.

2. Элемент управления StatusBar включает свойство, которое позволяет пользователю дважды щелкнуть на поле в строке и тем самым запустить событие. Измените пример StatusBar, чтобы пользователь мог двойным щелчком на строке состояния выделять текст полужирным, курсивным и подчеркнутым шрифтом. Обеспечьте, чтобы текст Bold, отображаемый в панели инструментов, меню и строке состояния, всегда выделялся полужирным, когда эта опция активизирована, и не выделялся в противном случае. Выполните это же для опций Italic (Курсив) и Underlined (Подчеркнутый).

И, наконец, добавьте кнопку в форму, дважды щелкните на ней, чтобы добавить в проект обработчик ее события Click, а затем добавьте следующий код:

private void buttonToggle Click(object sender, EventArgs e) {

ctlLabelTextboxl.Position = ctlLabelTextboxl.Position == LabelTextbox.CtlLabelTextbox.PositionEnum.Right ? LabelTextbox.CtlLabelTextbox.PositionEnum.Below : LabelTextbox.CtlLabelTextbox.PositionEnum.Right;

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

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

Резюме

В этой главе мы начали с того, на чем остановились в предыдущей главе, и исследовали элементы управления MainMenu и ToolBar. Вы научились создавать приложения MDI и SDI и узнали, как меню и панели инструментов используются в этих приложениях. Затем мы перешли к созданию собственного элемента управления: разработке свойств, интерфейса пользователи и событий элемента управления. Следующая глава завершает рассмотрение форм Windows Forms, описывая особый тип форм, который мы лишь вскользь затронули до сих пор: обычные диалоговые окна Windows.

Далее перечислены ключевые моменты, с которыми вы ознакомились в этой главе.

□ Использование трех строковых элементов управления, которые позволяют работать с меню, панелями инструментов и строками меню в приложениях Windows Forms.

а Создание MDI-приложений, которые используются для еще большего расширения возможностей текстового редактора.

а Создание собственных элементов управления на основе существующих элементов управления.




Использование обычных диалоговых окон

В предшествующих трех главах мы рассмотрели различные аспекты программирования приложений Windows Forms и реализацию таких компонентов, как меню, панели инструментов и формы SDI и MDI. Теперь вы уже умеете отображать простые окна сообщений для получения информации от пользователя и создавать более сложные нестандартные диалоговые окна для запроса специфичной информации. Однако для выполнения таких обычных задач, как открытие и сохранение файлов, можно использовать готовые классы диалоговых окон, а не создавать собственные специализированные диалоговые окна.

Этот подход предпочтительнее не только потому, что требует меньшего объема кода, но и поскольку использует знакомые диалоговые окна Windows, придавая приложению стандартный вид и образ действий. Каркас .NET Framework содержит классы, которые подключают диалоговые окна Windows для открытия и создания каталогов, открытия и сохранения файлов, обращения к принтерам и выбора цветов и шрифтов.

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

□ Использование классов OpenFileDialog и SaveFileDialog.

□ Вы ознакомитесь с иерархией класса печати каркаса .NET и научитесь использовать классы PrintDialog, PageSetupDialog и PrintPreviewDialog для реализации печати и предварительного просмотра.

□ Изменение шрифта и цвета с помощью классов FontDialog и ColorDialog.

□ Использование класса FolderBrowserDialog.

Обычные диалоговые окна

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



1 ... 166 167 168 [ 169 ] 170 171 172 ... 396

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика