ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Рис. 21.33. Встраивание ресурсов изображения
После перекомпиляции вашей библиотеки Windows Controls вы можете снова загрузить предыдущий проект CarControlTestForm. Щелкните правой кнопкой на имеющейся пиктограмме CarControl в окне Toolbox и выберите Delete (Удалить).
Затем снова добавьте элемент CarControl в панель инструментов (с помощью щелчка правой кнопкой мыши с последующим выбором Choose Items). На этот раз вы должны увидеть в окне панели инструментов свой пользовательский точечный рисунок (рис. 21.34).
Рис. 21.34.
На этом наше обсуждение вопросов создания пользовательских элементов управления Windows Forms завершается. Я надеюсь, что этот пример вызвал у вас интерес к разработке пользовательских элементов управления. Здесь была использована стандартная для учебников автомобильная тема, но вы можете представить себе пользовательский элемент управления, отображающий круговую диаграмму, построенную на основе содержимого соответствующей таблицы из базы данных, или элементы управления, расширяющие функциональные возможности стандартных элементов пользовательского интерфейса.
Замечание. Чтобы узнать больше о разработке пользовательских элементов управления Windows Forms, обратитесь к книге Matthew MacDonald, User Interfaces In C#: Windows Forms and Custom Controls (Apress, 2002).
Исходный код. Проект CarControlLibrary размещен в подкаталоге, соответствующем главе 21.
Создание пользовательских диалоговых окон
Теперь, когда вы понимаете роль базовых элементов управления Windows Forms и суть процесса построения пользовательских элементов управления, давайте рассмотрим вопрос создания пользовательских диалоговых окон. Здесь хорошей вестью является то, что все уже известное вам о Windows Forms оказывается непосредственно применимым и к случаю программировании диалоговых окон. В общем и целом, создание (и отображение) диалоговых окон ничуть не более сложно, чем добавление в проект новой формы.
В пространстве имен System.Windows.Forms для этого нет специальною базового класса. Диалоговое окно – это просто "специальная" форма. Например, многие диалоговые, окна не позволяют менять свои размеры, поэтому для их свойства FormBorderStyle выбирается значение FormBorderStyle.FixedDialog. Также, в диалоговых окнах свойства MinimizeBox и MaximizeBox обычно равны false (ложь). В этим случае вид диалогового окна вообще является фиксированным, Наконец, если установить значение false для свойства ShowInTaskbar, форме будет запрещено появляться в панели задач Windows XP.
Чтобы продемонстрировать возможности работы с диалоговыми окнами, создайте новое Windows-приложение с именем SimpleModalDialog. Главный тип Form будет поддерживать объект MenuStrip, содержащий пункты меню Файл->Выход и Сервис->Настройка. Постройте этот пользовательский интерфейс и обработайте событие Click для пунктов меню Выход и Настройка. Также определите член-переменную строкового типа (с именем userMessage) в рамках главного типа Form и отобразите соответствующие данные в обработчике события Paint главной формы. Вот как выглядит соответствующий программный код файла MainForm.cs.
Теперь добавьте в текущий проект новый объект Form с именем UserMessageDialog.cs с помощью выбора Project->Add Windows Form из меню. Установите для свойств ShowInTaskbar, MinimizeBox и MaximizeBox значения false. Затем постройте пользовательский интерфейс, состоящий из двух типов Button (для кнопок OK и Отмена), одного TextBox (чтобы предоставить пользователю возможность ввести сообщение) и элемента Label с инструкцией. Один возможный вариант показан на рис. 21.35.
Рис. 21.35. Пользовательское диалоговое окно
Наконец, откройте доступ к значению Text элемента TextBox формы с помощью пользовательского свойства с именем Message.
Свойство DialogResult
В качестве заключительного задания при создании пользовательского интерфейса выберите кнопку OK в окне проектирования формы и найдите свойство DialogResult. Назначьте DialogResult.OK кнопке OK и DialogResult.Cancel – кнопке Отмена. Формально говоря, вы можете назначить свойству DialogResult любое значение из перечня DialogResult.
Но что же означает присваивание значения свойству DialogResult элемента Button? Это свойство может быть назначено для любого типа Button (как и для самой формы), и оно позволяет родительской форме определить, какую из кнопок выбрал конечный пользователь. Для примера измените обработчик меню Сервис-> Настройка в рамках типа MainForm так, как предлагается ниже,