private EventHandler RBH; // Экземпляр делегата
// для кнопок-переключателей
private EventHandler CBH; // Экземпляр делегата
// для опций
private EventHandler TBH; // Экземпляр делегата
// для текстового поля
// Свойство для определения размера шрифта:
private int FSize{
get{
продолжение
288
Глава 8. Приложение с графическим интерфейсом: учебный проект
Листинг 8.1 (продолжение)
int size; // Локальная целочисленная переменная
try{ // Блок обработки исключительных ситуаций
// Попытка преобразовать текст текстового
// поля в число:
size=Int32.Parse(tsize.Text);
// Если маленькое число, генерируем ошибку:
if(size<min) throw new Exception();
if(size>max){ // Если слишком большое число,
// ограничиваем значение
size=max; // Значение локальной переменной
// Присваивание значения текстовому полю:
tsize.Text=size.ToString();
}
return size; // Результат аксессора - значение
// свойства
}
catch{ // Обработка исключительной ситуации
size=min; // Значение локальной переменной - по
// минимуму
tsize.Text=size.ToString(); // Заполнение текстового
// поля
return size; // Значение свойства в случае
// исключительной ситуации
}
}
}
// Свойство для определения шрифта для
// образца текста.
// Свойство является объектом класса Font:
private Font SFont{
get{
FontStyle fs=FontStyle.Regular; // Стиль шрифта. Начальное
// значение
if(CBtns[0].Checked) fs= fs|FontStyle.Bold; // Применяем
// жирный
// шрифт
if(CBtns[1].Checked) fs|=FontStyle.Italic; // Применяем
// курсивный
// шрифт
string fn=FN[0]; // Текстовое название шрифта.
// Начальное значение
// Перебор кнопок-переключателей для
// определения положения переключателя:
for(int i=1;i<RBtns.Length;i++){
if(RBtns[i].Checked) fn=FN[i]; // Изменение названия
// шрифта
Программный код и выполнение программы 289
}
// Создается объект шрифта:
Font F=new Font(fn,FSize,fs);
// Результат свойства:
return F;
}
}
/*
Метод, который используется в качестве обработчика события
выбора пункта меню, связанного с определением типа шрифта.
*/
public void setType(Object obj,EventArgs ea){
string menu; // Локальная текстовая переменная
menu=(obj as MenuItem).Text; // Текст выбранного пункта меню
// Оператор цикла для перебора
// кнопок-переключателей:
for(int i=0;i<RBtns.Length;i++){
if(menu==RBtns[i].Text){
// Если текст пункта меню совпадает
// с текстом кнопки, переключатель
// устанавливается в выделенное положение:
RBtns[i].Checked=true;
return; // Завершается работа метода
}
}
}
/*
Метод, который используется в качестве обработчика события
выбора пункта меню, связанного с определением стиля шрифта.
*/
public void setStyle(Object obj,EventArgs ea){
int index; // Локальная целочисленная переменная
index=(obj as MenuItem).Index; // Индекс выбранного пункта
// в меню
// Изменение (инверсия) статуса опции:
CBtns[index].Checked=!CBtns[index].Checked;
}
/*
Метод используется для обработки события выбора пункта меню, связанного с определением размера шрифта.
*/
public void setSize(Object obj,EventArgs ea){
string size; // Локальная текстовая переменная
size=(obj as MenuItem).Text; // Текст выбранного пункта меню
tsize.Text=size; // Присваивание нового значения
продолжение
290
Глава 8. Приложение с графическим интерфейсом: учебный проект
Листинг 8.1 (продолжение)
// текстовому полю
}
/*
Метод используется в качестве обработчика события щелчка
на кнопке,
в результате чего применяются настройки шрифта, выполненные
в окне формы.
*/
public void OKButtonClick(Object obj,EventArgs ea){
sample.Font=SFont; // Применение шрифта, определяемого
// свойством SFont
}
/*
Метод используется в качестве обработчика щелчка на кнопке, предназначенной для завершения работы приложения.
*/
public void CancelButtonClick(Object obj,EventArgs ea){
Application.Exit(); // Завершение работы программы
}
/*
Метод для создания главного меню. При вызове метода формируется
главное меню оконной формы. Ссылка на объект этого меню
возвращается в качестве
результата.
*/
private MainMenu getMyMenu(){
// Создание объекта главного меню:
MainMenu MyMenu=new MainMenu();
// Создание массива из объектов - пунктов меню:
MenuItem[] mainMI=new MenuItem[MN.Length];
// Оператор цикла для перебора пунктов меню:
for(int i=0;i<MN.Length;i++){
mainMI[i]=new MenuItem(MN[i]); // Создание объекта
// пункта меню
// Добавление пункта меню в главное меню:
MyMenu.MenuItems.Add(mainMI[i]);
}
/*
Заполнение командами каждого из пунктов главного меню.
Используется метод setMyMenuItem() для заполнения пунктов меню.
Первый аргумент метода - объект заполняемого пункта меню.
Второй аргумент метода - список текстовых значений-названий команд.