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

минимальное и максимальное значения размеров шрифта используются

для формирования списка. Сам список формируется специальным ме-

тодом — этот метод в качестве результата возвращает текстовый массив, элементами которого являются числовые значения (их текстовое пред-

ставление) в диапазоне от минимального до максимального значения.

 В качестве полей класса объявляются экземпляры делегата 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; // Массив экземпляров делегатов

// для кнопок