Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 194
Текст из файла (страница 194)
Обратите внимание на то, что пункты выпадающего меню добавляются к объекту в1 как к самому верхнему пункту меню Файл. Когда один объект типа мепи1сев добавляется к другому, добавляемый элемент становится частью выпадающего меню, связанного с тем пунктом главного меню, к которому добавляются пункты выпадающего меню. Поэтому если после добавления объектов апев1 — асевЗ к объекту в1 выбрать пункт главного меню Файл, раскроется выпадающее меню с дополнительными пунктами Открыть, Закрыть и Выйти. После создания структуры меню каждому его пункту необходимо присвоить обработчик событий. Как пояснялось ранее, при выборе из меню формируется событие с11с)г.
Поэтому в приведенном ниже фрагменте кода обработчики событий присваиваются объектам 1сев1 — 1севЗ как отдельным пунктам выпадающего меню. // добавить обработчики событий к отдельным // пунктам меню. 1сев1.С11сн т= ММОрепС11сьм асев2.С11сн т= ММС1оеес11сн) 1севЗ.С11сн т= ммхк1ПС11сн) Так, если пользователь выберет пункт Выйти из выпадающего меню, произойдет вызов обработчика ММЕх1СС11ск () . И наконец, объекту типа Маапмепо должно быть присвоено свойство Мепп данной формы, как показано ниже. Мепч = МуМепо; После этого присваивания меню будет отображено при создании окна, а результаты выбора из меню направлены соответствующему обработчику событий.
960 Часть П. Библиотека С» В приведенном ниже примере программы все рассмотренные выше этапы создания приложения иа основе форм для т)(г(пттоттз сводятся вместе и показывается, как организуется обработка результатов выбора из главного меню. // Добавить главное меню. пв1пс Зузгевт паапа зузгев. Иапбонз. Гогвв) с1авв Мепптогв: Гоги ( Ма1пиепп Мумепп) рп511с Меппгогв() ( Техт = "добавление главного меню"; // Создать объект главного меню.
Мумепп = пен Маапмепп()т // Добавить пункты главного меню. мепп1сев в1 = пен мепп1сев("Файл" ) МуМепп.иепп1Севв.лбе(в1)т Мепп1Сев в2 = пен Мепп1Сев("Сервис")т МуМепп.иепп1гевв.йбб(в2)т // Создать подменю Файл. Мепп1гев Тгев1 = пен Мепп1Сев("Открыть" ) в1.Меппггевв.Асб(1гев1)т Мепп1Сев 1Сев2 = пен Мепп1гев("Закрыть" ) в1.иепп1гевв.лбе(1гев2)) Мепп1гев 1гевз = пен Мепп1гев("Выйти" ) в1.Мепп1Севв.йбб(асевз)т // Создать подменю Сервис. Мепп1Сев Тгев4 = пен Мепо1Сев("Координаты")т в2.Мепп1СЕвЗ.АПб(1гев4)т Мепп1Сев 1Сев5 = лен Мепп1гев("Изменить размер"); в2.Мепп1гевз.лбе(ггев5)) Мепп1гев Тгевб = пеи Мепп1гев("Восстановить" ) в2.Мепп1гевв.лббгагевб) т // присвоить созданное меню форме. Мепп = Мумеппт // Добавить 1гев1.С11с)с агев2.С11с)с 1гевЗ.С11ск .1Сев4.С11ск 1гев5.С11си Тгевб.С11с)т обработчики событий к отдельньвк пунктам меню. Ь= ММОрепС11сст += ММС1овеС11с)т) += ММВх1СС11ск) += ММСоогбс11с)ст т= ММСПапдеС11с)т> += МипевгогеС11сл; Глава 26, Создание приложений на основе форм длл )()(лбова 961 (Зтатпгеаб) яоао1с чозб Иаап () ( Мепиуогю яне1 = пен Иепиуогщ(); Арр11сас1оп.ЕпаЬ1ео1япа15оу1ея(); Прр11саС1оп.ноп(яне1)) ) // Обработчик событий в связи с выбором пункта // Координаты из главного меню Сервис.
чо16 ИИСоогбС11сн(оЬ3есо нЬо, Ечепойгцв е) ( // Создать строку, содержащую координаты. яог1пс вахе = Зсг1по.гогюас("(О): (1), (2)1п(3): (4), (5) "Левый верхний угол: ", Тор, Ьего, "правый нижний угол: ", Воссою, К10ьс)л // Отобразить окно сообщений. Меяяаденох.епон(я1хе, "Координаты окна", МеяяаееВохВпосопя.ОК)л ) // Обработчик событий в связи с выбором пункта // Изменить размер из главного меню Сервис. чо1б ИИСЬапееС11сн(оЬзесо нпо, Ечепвагдв е) ( набсЬ = Не10Ьс = 2001 ) // Обработчик событий в связи с выбором пункта // Восстановить из главного меню Сервис.
човб иикеясогес11си(оь)есс ньо, енепьйгдя е) ( Напои = Не1ОЬС = 300; // Обработчик событий в связи с выбором пункта // Открыть из главного меню Файл. гоаб ИИОрепС11сн(оЬЗесо нпо, Ечепейгез е) ( МеяяаоеВох.епон("Неактивно", "Неактивно", Меяяаденохнпввопя.ОК)л // Обработчик событий в связи с выбором пункта // Закрыть из главного меню Файл.
чоаб ИМС1ояеС11сн(оЬзесо нпо, Ечепоагея е) ( МеяяадеВох.ЗЬон("Неактивно", "Неактивно", Меяяаеенохнпятопя.ОК)л // Обработчик событий в связи с выбором пункта // Выйти из главного меню Файл. ЧО1б МИЕХЕСС11СХ(ОЬ)ЕСС НЬО, ЕЧЕПСКГЦЯ Е) ( Еаа1однеяп1С геяп11 = Иеяяадейох.епон( Глава 26. Создание приложений на основе форм для))дп()ояз 963 При выборе пункта меню Изменить размер главное окно изменяет свой размер до величины 200 пикселей как в высоту, так и в ширину.
Это делается с помощью приведенных ниже свойств И1с(ГП и Не1о)тс. риЫ1с 1пг и1г(сп ( пес> зесл риьагс 1пс Негдпв ( пес; леся ) А при выборе пункта меню Восстановить главное окно возвращается к своему исходному размеру. Создание меню в современном стиле Описанный выше способ создания меню в традиционном стиле вполне допустим. Тем не менее в среде .НЕТ Егашейог)г предоставляется более совершенный способ организации меню с помощью элемента управления Мепизсгфр. Этот элемент управления придает меню современный вид и наделяет их такими дополнительными возможностями, как слияние меню.
Благодаря преимуществам, которые дает применение элемента управления мепиэгг1р, предпочтение рекомендуется отдавать именно этому способу создания меню. Класс МепиБГгдр является современным эквивалентом рассматривавшегося ранее класса ма1пмепи и производным от класса тоо1Бгг1р, в котором определяется большая часть функций, используемых при новом способе создания меню. Класс тоо1БГг1р, по существу, является контейнером для объектов панели инструментов и пунктов меню. Все эти функции наследуются классом мепиЯггфр, где обеспечивается конкретная поддержка меню, в том числе и главного. Отдельные пункты меню хранятся в классе МепиЯГгдр в виде объектов класса тоо1Б Гг1рМепи1 сего, который является современным эквивалентом класса Мепи1сепь также рассматривавшегося ранее.
Классы МепиЯГгфр и Тоо1БГг1риепи1Гет применяются таким же образом, как и описанные ранее классы майпмепи и мепи1гепг Ниже приведена одна из возможных процедур создания меню средствами класса Мепизсг1р. 1. Создайте элемент управления Мепиэсгфр, 2. Добавьте к элементу управления мепиБГг1р объекты класса тоо1БГг1рмепи11елл обозначающие пункты главного меню. С этой целью вызывается метод дг(о() для коллекции, на которую ссылается свойство 1Гевз, предоставляемое в классе Мепизсг1р. 3. Добавьте к объекту типа тоо1Бгг1рмепи1гет каждого пункта главного меню список объектов типа тоо1Яггйрмепи1гем, определяющих пункты связанного с ним выпадающего меню. С этой целью вызывается метод дг(г) () для коллекции, на которую ссылается свойство Югорпомп1Гемз.
4. Добавьте обработчики событий для каждого выбираемого пункта меню. 5. Добавьте элемент управления Мепиэсг1р в список элементов управления в форме, вызвав метод АгЫ () для свойства Сопсго1э. 6. Присвойге элемент управления Мепивсг1р свойству Ма1пмепивсг1р, связанному с формой. Уделите особое внимание пп. 2 и 3 данной процедуры, поскольку онн отличаются от приведенной ранее процедуры создания меню традиционным способом.
Во-первых, в п.2 отдельные пункты главного меню, обозначающие раскрывающиеся подменю, добавляются в коллекцию, на которую ссылается свойство 1семэ. И во-вторых, в п.3 отдельные пункты 96~ Часть П. Библиотека С» подменю добавляются в коллекцию, иа которую ссылается свойство Огорцонпггевэ. (Для этой цели в классах ма1пмепи и мепи1сев используется свойство мепи1севз.) А в остальиом обе процедуры ничем существенным ие отличаются. Приведенный ниже пример программы является вариантом предыдущего примера, переделанным с целью продемонстрировать примеиеиие злемеита управления МепиЯСгйр.
Пример вывода иа экран при выполнении этой программы приведен иа рис. 26.5. Обратите внимание иа более современный вид меню. // Использовать элемент управления Мепизгггр. илана 5уэгепц иэгпо Яузгев.яспбонз.гогвэ; с1аээ МепиГогв: Гогв ( МепиЯСгар МуМепи; // использовать элемент управления МепиЯСг1р риЬ11с МепиГогв() ( Техг = "Применение элемента управления Мепизгг1р"; // Создать объект главного меню. Мумепи = пен Мепизггар()т // Добавить пункты главного меню. Тсз15гг1риепи1гев в1 = пен Тоо15гг1риепи1гев("Файл" ); Мумепи.1гевэ.Абб(в1); Тоо1ЯСг1рМепи1гев в2 = пен Тоо1ЯСгарМепи1гев("Сервис")т МуМепи.ХСевз.лаиб(в2); // Создать подменю Файл.
Тоо15ггарМепи1гев Хгев1 = пен Тоо1ЯСгарМепи1Сев("Открыть" ) в1.пгорпонпХСевэ.йбб(1гев1)к Тоо15гг1рмепи1гев Хгев2 = пен Тоо15гггрмепи1гев("Закрыть")т в1.пгорпонпХСевз.лбб(1гев2)к Тоо15ггсриепиггев Хгевз = пен Тоо15ггсриепиХСев("Выйтн")т в1.пгорпонпХСевз.лбб(1гевз); // Создать подменю Сервис.