сив). Особенность значений перечисления FontStyle такова, что если по-
надобится применять сразу несколько стилей (например, жирный курсив), то стили объединяются с помощью оператора побитового или |. Напри-
мер, чтобы получить жирный курсив, используем инструкцию FontStyle.
Bold|FontStyle.Italic. С другой стороны, добавление жирного стиля или
курсива к обычному шрифту означает применение, соответственно, жир-
ного стиля или курсива. На этой особенности базируются некоторые не-
сложные вычисления при обработке настроек в окне формы.
В качестве текстовых названий шрифтов мы используем названия
«Arial», «Times» и «Courier», а в результате, скорее всего, будут
применяться шрифты Arial, Times New Roman и Courier New соот-
ветственно. Вообще же в таких вопросах лучше отталкиваться от
системных параметров — в данном случае списка установленных
шрифтов.
Обработка событий базируется на присваивании значений событиям Click таких элементов, как кнопки и пункты меню. Событие происходит, когда
284
Глава 8. Приложение с графическим интерфейсом: учебный проект
пользователь щелкает на соответствующем элементе. Для радиокнопок мы
используем событие CheckedChanged, которое происходит при изменении
состояния переключателя. Для опций полезным событием-членом будет
Checked, которое позволяет определить, установлена опция или нет. Что
касается обработчиков событий, то, напомним, это должны быть мето-
ды, не возвращающие результат, с двумя аргументами: объектом класса
Object, который определяет вызвавший событие объект, и объектом клас-
са EventArgs с описанием события. Второй аргумент мы использовать не
будем, а вот первый аргумент в некоторых случаях будет нами использо-
ваться. Что касается регистрации обработчиков событий, то для этих це-
лей нами традиционно используются экземпляры делегата EventHandler.
Далее имеет смысл обратиться к программному коду.
Программный код и выполнение
программы
И мы с пути кривого ни разу не свернем,
а надо будет — снова пойдем кривым
путем.
Из к/ф «Айболит 66»
Перед тем как приступить непосредственно к рассмотрению программного
кода, сделаем несколько общих замечаний относительно организации про-
граммы. В частности, есть несколько моментов, на которые имеет смысл
обратить внимание при анализе программы:
Метка с образцом текста реализуется через объект специального класса, который создается на основе класса метки Label. Мы поступаем следую-
щим образом: на основе класса Label путем наследования создаем класс
MyLabel. Код этого класса состоит, фактически, из конструктора, в кото-
ром определяются основные параметры текстовой метки. У конструк-
тора класса четыре целочисленных аргумента. Аргументы передаются
в метод SetBounds(), который вызывает из объекта метки и определяет
положение и размеры области метки. Также в конструкторе класса зада-
ется тип границ области метки (выделение области рамкой), ее текстовое
значение и способ выравнивания текста в области метки (выравнивание
по центру). Каждый раз, создавая объект класса MyLabel, получаем метку
с соответствующими характеристиками. Вопрос только в том, куда эту
метку добавить. Объект класса MyLabel создается с передачей четырех
целочисленных аргументов.
Программный код и выполнение программы 285
Для реализации оконной формы создается класс MyForm, который на-
следует класс Form. У класса достаточно много полей, несколько методов
и два свойства. Все основные настройки выполняются в конструкторе
класса.
Важную роль в рамках использованного в программе подхода играют
текстовые массивы, которые содержат названия кнопок, типы шрифтов, их стили. На основе этих списков формируются массивы объектов для
элементов управления. Это «полуавтоматический» подход, который по-
зволяет достаточно легко добавлять или убирать элемент управления —
во многих случаях достаточно добавить или убрать название элемента
в списке названий группы элементов. Правда, при этом могут возникнуть
проблемы с обработкой событий для добавленных/удаленных элементов
и распределением области оконной формы.
Диапазон возможных значений размера шрифта определяется мини-
мальным и максимальным значениями, которые реализуются в виде
полей. При создании списка размеров шрифта в одном из пунктов меню