ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Наследование на уровне форм является очень мощной технологией программирования, поскольку она позволяет построить базовую форму, обеспечивающую базовые функциональные возможности для целого семейства связанных диалоговых окон. Если связать базовые формы в компоновочном блоке .NET, другие члены вашей команды разработчиков смогут расширять эти типы, используя при этом тот язык .NET, который они предпочитают использовать.
Для примера предположим, что вы хотите создать подкласс класса UserMessageDialog, чтобы в новом диалоговом окне пользователь имел возможность указать, что сообщение должно отображаться курсивом. Для этого выберите Project->Add Windows Form из меню, но на этот раз добавьте новую форму Inherited Form (Наследуемая форма), назначив
Рис. 21.36. Добавление производной формы
После щелчка на кнопке Add (Добавить) вы увидите окно утилиты Inheritance Picker (Выбор наследования), которая позволяет выбрать форму из вашего текущего проекта или форму из внешнего компоновочного блока (с помощью кнопки Browse). Для данного примера выберите свой уже существующий тип UserMessageDialog. Вы обнаружите, что ваш новый тип Form расширяет ваш тип диалогового окна, а не базовый объект Form непосредственно. Теперь вы можете расширять полученную форму так, как захотите. Для проверки просто добавьте новый элемент управления CheckBox (с именем checkBoxItalic), который будет доступен через свойство, названное Italic.
Теперь, имея подкласс базового типа UserMessageDialog, измените MainForm так, чтобы новое свойство Italic можно было использовать. Просто добавьте новый член-переменную типа Boolean для использования при построении объекта Font, представляющего курсивный шрифт, и измените обработчик события Click для меню Сервис->Настройка так, чтобы использовался ItalicUserMessageDialog. Вот как может выглядеть окончательный вариант программного кода.
Исходный код. Проект SimpleModalDialog размещен в подкаталоге, соответствующем главе 21.
Динамическое позиционирование элементов управления Windows Forms
Чтобы завершить эту главу, давайте рассмотрим несколько подходов, которые можно использовать для управления размещением элементов управления в форме. Если при создании типа Form вы предполагаете, что элементы управления должны отображаться с использованием абсолютных позиций, то это, по сути, означает, что кнопка, размещенная в окне проектирования формы на 10 пикселей ниже и на 10 пикселей правее верхнего левого угла формы, будет там оставаться в течение всей ее "жизни".
При создании формы, содержащей элементы управления пользовательского интерфейса, вы должны решить, должна ли форма позволять изменение размеров ее окна. Обычно главное окно допускает изменение размеров, тогда как диалоговые окна – нет. Напомним, что допустимость изменения размеров формы задается свойством FormBorderStyle. которое может принимать любое из значений перечня FormBorderStyle.
Предположим, что вы захотели изменить размеры формы. Тогда в связи с содержащимися в форме элементами управления возникают интересные вопросы. Например, если пользователь сделает форму меньше, чем необходимо для отображения всех элементов управления, должны ли эти элементы управления изменять свои размеры (и, возможно, расположение) в соответствии с размерами формы?
Свойство Anchor
В Windows Forms свойство Anchor используется для определения относительной фиксированной позиции, в которой всегда должен пребывать данный элемент управления. Каждый производный от Control тип имеет свойство Anchor, которое может принимать любое из значений перечня AnchorStyles, описанных в табл. 21.13.
Таблица 21.13. Значения AnchorStyles
Значение | Описание |
---|---|
Bottom | Нижний край элемента управления прикрепляется к нижнему краю контейнера |
Left | Левый край элемента управления прикрепляется к левому краю контейнера |
None | Элемент управления не прикрепляется к краям контейнера |
Right | Правый край элемента управления прикрепляется к правому краю контейнера |
Top | Верхний край элемента управления прикрепляется к верхнему краю контейнера |
Чтобы закрепить элемент в верхнем левом углу окна, можно связывать соответствующие значения операцией ИЛИ (например, AnchorStyles.Top | AnchorStyles.Left). Целью использования свойства Anchor является указание того, какие расстояния от краев элемента управления до краев контейнера должны быть фиксированы. Например, если задать для кнопки следующее значение Anchor: