минимальное и максимальное значения размеров шрифта используются
для формирования списка. Сам список формируется специальным ме-
тодом — этот метод в качестве результата возвращает текстовый массив, элементами которого являются числовые значения (их текстовое пред-
ставление) в диапазоне от минимального до максимального значения.
В качестве полей класса объявляются экземпляры делегата EventHandler (в том числе и один массив из экземпляров делегатов) для обработки
событий, связанных с изменением настроек элементов окна.
В классе описаны два свойства. Оба только возвращают значения.
Имеется целочисленное свойство для определения размера шрифта, и свойство, которое определяет шрифт, применяемый для образца тек-
ста в окне формы. Это свойство возвращает в качестве значения объект
класса Font. Свойство для определения размера шрифта вычисляется
на основе значения текстового поля. Причем обработка значения поля
выполняется так, что программа не прекращает работу при некоррект-
ном значении поля. Также контролируется «пограничный» режим, в ре-
зультате чего применяемый размер шрифта не выходит за допустимые
пределы.
В классе описаны методы, используемые в качестве обработчиков со-
бытий. Эти методы не возвращают результат, и у них по два аргумента: объект класса Object и объект класса EventArgs.
Для формирования главного меню есть специальный метод. В этом же
методе реализуется на программном уровне система обработки событий, связанных со взаимодействием пользователя с главным меню. Для пун-
ктов меню регистрируются делегаты обработчиков событий. При этом
286
Глава 8. Приложение с графическим интерфейсом: учебный проект
неявно предполагается, что делегаты ссылаются на соответствующие
методы. Присваивание значений делегатам выполняется в конструкторе
класса MyForm. Метод для формирования главного меню в конструкторе
вызывается после того, как присвоены значения экземплярам делегатов, посредством которых регистрируются обработчики событий.
Кроме метода для формирования главного меню программы есть метод
для формирования отдельного пункта меню. Этот метод вызывается
в методе для формирования главного меню.
В некоторых случаях приходится явно преобразовывать числовые зна-
чения в текстовое значение (получать текстовое представление числа).
Для этого из соответствующей числовой переменной вызывается метод
ToString().
Приняв на вооружение все перечисленное выше, можем смело приступить
к «прочтению» программного кода, представленного в листинге 8.1.
Листинг 8.1. Приложение с графическим интерфейсом
using System;
using System.Drawing;
using System.Windows.Forms;
// Класс для метки с образцом текста:
class MyLabeclass="underline" Label{
/*
Конструктор класса. Аргументы - координаты левого верхнего
угла области метки и размеры области.
*/
public MyLabel(int x,int y,int w,int h){
Text="Образец текста"; // Текстовое значение метки
SetBounds(x,y,w,h); // Положение и размер метки
BorderStyle=BorderStyle.FixedSingle; // Тип границы области
// метки
// Способ выравнивания текста в метке:
TextAlign=ContentAlignment.MiddleCenter;
}
}
/*
Класс формы. В этом классе описано "практически все".
Класс создается наследованием класса Form.
*/
class MyForm:Form{
// Названия меню:
private string[] MN={"Действие","Тип шрифта","Стиль
шрифта","Размер шрифта"};
// Названия шрифтов:
private string[] FN={"Arial","Times","Courier"};
Программный код и выполнение программы 287
// Стили шрифтов:
private string[] FS={"Жирный","Курсив"};
// Названия кнопок:
private string[] BN={"Применить","Выход"};
// Минимальный размер шрифта:
private int min=10;
// Максимальный размер шрифта:
private int max=20;
// Метод для "вычисления" текстового массива
// целочисленных значений:
private string[] FSz(){
// Текстовый массив нужного размера:
string[] fs=new string[max-min+1];
// Оператор цикла для заполнения текстового
// массива:
for(int i=0;i<fs.Length;i++){
fs[i]=(min+i).ToString(); // Преобразование числа в текст
}
return fs; // Результат метода - массив
}
// Метка с образцом текста:
private MyLabel sample;
// Кнопки:
private Button[] Btns;
// Переключатели (для выбора типа шрифта):
private RadioButton[] RBtns;
// Группа переключателей:
private GroupBox FName=new GroupBox();
// Опции (для выбора стиля шрифта):
private CheckBox[] CBtns;
// Текстовое поле для ввода размера текста:
private TextBox tsize;
/*
Группа экземпляров делегатов, используемых
при обработке событий.
*/
private EventHandler[] BH; // Массив экземпляров делегатов
// для кнопок