Выбрать главу

сив). Особенность значений перечисления 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. У класса достаточно много полей, несколько методов

и два свойства. Все основные настройки выполняются в конструкторе

класса.

 Важную роль в рамках использованного в программе подхода играют

текстовые массивы, которые содержат названия кнопок, типы шрифтов, их стили. На основе этих списков формируются массивы объектов для

элементов управления. Это «полуавтоматический» подход, который по-

зволяет достаточно легко добавлять или убирать элемент управления —

во многих случаях достаточно добавить или убрать название элемента

в списке названий группы элементов. Правда, при этом могут возникнуть

проблемы с обработкой событий для добавленных/удаленных элементов

и распределением области оконной формы.

 Диапазон возможных значений размера шрифта определяется мини-

мальным и максимальным значениями, которые реализуются в виде

полей. При создании списка размеров шрифта в одном из пунктов меню