ется массив mi объектов класса MenuItem. Аргументом конструктору
класса MenuItem передаются текстовые названия команд. Добав-
ление команды меню в пункт меню выполняется через коллекцию
MenuItems с помощью метода Add().
Кроме этого, для команд разных пунктов меню выполняется регистрация
обработчиков событий. Здесь есть два важных момента. Во-первых, ко-
манда вида mainMI[k].MenuItems[m] означает m+1-ю команду в k+1-м пункте
главного меню, а событие Click для команды меню означает выбор пользо-
вателем этой команды. Во-вторых, для всех пунктов меню, кроме началь-
ного, для всех команд пункта меню в качестве обработчика регистрируется
один и тот же метод. Поэтому такой метод должен уметь как-то различать
разные команды в пределах пункта меню. В каждом методе-обработчике
эта задача решается по-разному.
Метод setType() вызывается для обработки выбора пункта меню, свя-
занного с определением типа шрифта. В теле метода объект obj (аргу-
мент), вызвавший событие, командой obj as MenuItem приводится к типу
MenuItem и для этого объекта считывается свойство Text (название ко-
манды). Затем с помощью оператора цикла ищется совпадение названия
команды и названия кнопки-переключателя. Если совпадение найдено, устанавливается соответствующий переключатель. В результате для пе-
реключателя происходит событие CheckedChanged, а на этот случай уже
имеется обработчик.
Метод setStyle() используется в качестве обработчика события выбора
пункта меню, связанного с определением стиля шрифта. В этом случае
определяется индекс команды пункта меню (свойство Index) и для опции
в окне формы с таким же индексом статус меняется на противополож-
ный — выделенная опция становится невыделенной, и наоборот.
Метод setSize() используется для обработки события выбора пункта
меню, связанного с определением размера шрифта. Здесь мы считываем
название команды (свойство Text) и присваиваем его в качестве значения
(свойство Text) текстовому полю (объект tsize-поле класса MyForm).
Важную роль в программном коде играет свойство SFont. У свойства име-
ется только get-аксессор, в котором на основе положения переключателей
типа шрифта, состояния опций стиля шрифта и значения текстового поля
304
Глава 8. Приложение с графическим интерфейсом: учебный проект
с размером шрифта формируется объект класса Font, который и возвраща-
ется в качестве результата (значения свойства). При этом размер шрифта
не просто считывается из текстового поля, но и обрабатывается. Для этого
в программе предусмотрено свойство FSize. В единственном get-аксессоре
этого свойства выполняется попытка преобразовать число в текст. За счет
trycatch блока, если такая попытка неудачна, в качестве значения разме-
ра шрифта используется минимально допустимое. Также отслеживаются
случаи выхода значения размера шрифта за допустимые пределы. В случае
если размер шрифта меньше минимально допустимого, искусственно ге-
нерируется ошибка, которая перехватывается блоком trycatch. Слишком
большие числовые значения отлавливаются с помощью условного опера-
тора. В любом случае применяемый шрифт, если он не совпадает с перво-
начально введенным пользователем, отображается в текстовом поле.
ВМЕСТО ЗАКЛЮЧЕНИЯ Графический
конструктор
Пока это лекция. И даже скучная лекция.
Из к/ф «В поисках капитана Гранта»
В книгах Вступление и Заключение играют очень важную роль. Во Всту-
плении обычно автор пытается убедить читателя, что именно эта книга чи-
тателю нужна больше всего и именно из этой книги читатель почерпнет
столько знаний, что прочие книги ему уже и не понадобятся. В Заключе-
нии обычно дается краткое пояснение по поводу того, почему чуда не слу-
чилось. Короче говоря, без Вступления и Заключения не обойтись никак.
Мы постараемся отойти от канонов и употребить Заключение во благо, а не
в наущение. Но мистическую связь Вступления и Заключения разрывать
не будем. Во Вступлении мы самонадеянно утверждали, что к помощи гра-
фического конструктора, встроенного в среду Visual C# Express, прибегать
не будем. Здесь мы очень кратко покажем, как в графическом редакторе
можно создать простенькое функциональное окно. Ну а пытливый чита-
тель легко сможет экстраполировать подход и для создания более сложных