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

вый массив размера max-min+1. Затем массив заполняется числами, преобразованными в текст, и возвращается в качестве результата.

Поэтому, если нам нужен массив из текстовых представлений чисел

в диапазоне от min до max, мы используем в качестве ссылки на такой

массив инструкцию FSz().

В основном все эти действа происходят в конструкторе класса MyForm.

Например, массив кнопок (массив объектных переменных) создается

командой Btns=new Button[BN.Length]. Здесь размер массива кнопок со-

впадает с размером массива названий кнопок, что вполне логично. Затем

в операторе цикла индексная переменная i перебирает элементы кнопоч-

ного массива, и за каждый цикл выполняется создание объекта (коман-

да Btns[i]=new Button()), присваивание имени кнопке в соответствии

с текстовым значением «базового» текстового массива (команда Btns[i].

Text=BN[i]), определение позиции и размеров кнопки (команда Btns[i].

SetBounds(10,140+i*40,80,30)) и добавление кнопки в окно формы (ко-

манда Controls.Add(Btns[i])). Похожим образом все происходит и для

кнопок-переключателей RBtns и опций CBtns, с поправкой на имя «базо-

вого» текстового массива. Правда, у этих элементов задается еще свойство

Checked, которое отвечает за состояние элемента (выделен или нет). Для оп-

ций значение этого свойства устанавливается равным false (в начальный

302

Глава 8. Приложение с графическим интерфейсом: учебный проект

момент опции не выделены), а для кнопок-переключателей значение свой-

ства задается равным (i==0), в силу чего выделенным будет первый пере-

ключатель (для которого индекс i равен нулю).

Кнопки-переключатели необходимо объединить в группу, а уже потом

группа переключателей добавляется в форму. Отдельные переклю-

чатели добавляются не непосредственно в форму, а в группу пере-

ключателей. В программе есть объект FName класса GroupBox. Метод

Add() для отдельных кнопок-переключателей вызывается из объекта

FName. А для добавления в форму группы, метод Add() с аргументом

FName вызывается из объекта формы.

Мы намеренно разнесли во времени и пространстве процесс создания гра-

фических элементов и регистрацию обработчиков для элементов интер-

фейса. В программе используются экземпляры делегата EventHandler BH

(массив из экземпляров делегата для регистрации обработчиков щелчка

на кнопках в области формы и команд первого пункта главного меню, ко-

торые ссылаются на методы OKButtonClick() и CancelButtonClick()), RBH

(экземпляр делегата для обработки выбора команд второго пункта меню со

ссылкой на метод setType()), CBH (экземпляр делегата для обработки выбо-

ра команд третьего пункта меню со ссылкой на метод setStyle()) и TBH (эк-

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

ссылкой на метод setSize()). Для кнопок экземпляры делегата регистри-

руются для события Click (происходит при щелчке на кнопке). Экземпляр

делегата BH[0] регистрируется также для события CheckedChanged кнопок-

переключателей (происходит при изменении статуса переключателя). По-

скольку экземпляр делегата BH[0] регистрируется для кнопки Применить, изменение положения переключателей приводит к выполнению того же

метода, что и щелчок на кнопке Применить. Прочие экземпляры делегата ис-

пользуются при создании главного меню. И это отдельная история.

Кульминацией процесса создания главного меню является команда

Menu=getMyMenu() в конструкторе класса MyForm. Командой свойству Menu присваивается результат метода getMyMenu(). Несложно догадаться, что

именно этим методом создается и возвращается в качестве результата

главное меню формы.

Метод в качестве результата возвращает объект класса MainMenu. В теле

метода создается объект MyMenu класса MainMenu и массив mainMI объектов

класса MenuItem. Это пункты главного меню. Каждый новый пункт главно-

го меню добавляется методом Add() в коллекцию MenuItems объекта MyMenu.

Метод Add() вызывается из коллекции MenuItems, которая является полем

объекта MyMenu. Аргументом методу Add() передается добавляемый пункт

меню (объект, соответствующий этому пункту).

Наиболее значимые места программного кода           303

Заполнение командами каждого из пунктов главного меню выполняется

с помощью метода setMyMenuItem(). Аргументами методу передаются объ-

ект заполняемого пункта меню и список команд пункта меню (в виде тек-

стового массива).

ПРИМЕЧАНИЕ Метод setMyMenuItem() не возвращает результат. В теле метода созда-