|
Программирование >> Программирование с использованием ajax
Для создания этого события требуется выполнение трех условий. □ Наличие подходящего делегата, который может быть использован для вызова методов, присваиваемых пользователем событию □ Пользователь должен иметь возможность подписки на событие, посредством присвоения ему метода. □ Мы должны вызвать метод, который пользователь присвоил событию. Используемый делегат - 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. Обычные диалоговые окна Диалог - это окно, которое отображается в контексте другого окна. Диалоговое окно позволяет потребовать от пользователя ввод определенных данных до продолже-
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |