Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 193
Текст из файла (страница 193)
В данном случае такой подход не дает никаких особых преимуществ, то нетрудно представить себе ситуацию, в которой он может оказаться весьма ценным. Такой подход позволяет, в частности, написать обработчик событий независимо от типа конкретной кнопки. Применение окна сообщений К числу наиболее употребительных средств 1ачпдоьчз относится окно сообн(ений, которое представляет собой)предопределенное окно для вывода сообщений наряду с получением реакции от пользоЪателя с помощью таких элементов, как кнопки Уез, (Чо или ОК.
В приложении на основе форм функции окна сообщений реализуются средствами класса меээадевох, хотя создавать объект этого класса совсем не обязательно. Вместо этого для отображения окна сообщений вызывается статический метод ВЬон (), определенный в классе МеззадеВох.
У метода ЗЬон () имеется несколько форм. Ниже приведена одна из наиболее употребительных форм, в том числе и в примерах из этой главы. рнваьс апап1с Оьа1одаеао1С Звон(апгьпд над, аспьпд сарсхоп, меааадевоквитсопа тьма ОКСапсе1 теаиосапсе1 ЛЬогьнепгу1дпоге кестусапсе1 ок генно Каждое из этих значений обозначает кнопки, отображаемые в окне сообщений. Так, если в качестве параметра пЬЬ указывается значение Хеано, то в окне сообщений появляются кнопки Да 1 лез) и Нет (Хо). где тзд обозначает строку, выводимую в окне сообщений; сарсхоп — заголовок в окне сообщений; иЬЬ вЂ” кнопки, отображаемые в этом окне.
В итоге возвращается реакция пользователя на выводимое окно сообщений. Ме з а адеВоКВиккопз представляет собой перечисление, в котором определяются приведенные ниже значенгвь Глава 26. Создание приложений на основе форм для Вбпбовя 955 Значение, возвращаемое методом Яппи (), обозначает кнопку, которая была нажата. Оио относится к числу значений, определенных в перечислении П1а1осиеян10 и приведенных ниже. Авогс попе Сапсе1 1цпоге весту ок уея // Добавить кнопку остановки программы.
чяьпд Яуягеяп нягпд Яуясеи.вдпбоня.госин; пятна Яуясеи.пгаи1пд1 с1аяя Внссопгогз : Гоги ( впггоп мувоггоп; Ватсон Ясорвпссоп) риь11с Вчссопгогз () ( Техт = "Добавление кнопки остановки"; // Создать кнопки. МуВЧГСОП = Пен ВПГГОП()) МуВчссоп.ТЕхе = "Щелкните здесь"; МуВчссоп.ьосасдоп = пен Ро1пс(100, 200) Мувчссоп.И1бсь = 110! Ясорвиссоп = пен Ватсон(); Бсорвчссоп.техт = "Остановка"у БсорВпссоп.Ьосасдоп = пен Роьпс(100, 100) // добавить обработчики событий в окно. МуВисаоп.с11сх += МуВиссопс1гсды Сопсго1я.лоб(иувчссоп); 5сорзпссоп.С11ск ь= ЯсорВнссопС11сх) Сопсго1я.лоб(ЯГорвпссоп)у ) (ЯтАтпгеаб] ясасгс чоьд Ма1п() ( Виссопгоги яке1 = пен Впгсопгоги() Значение, возвращаемое методом Яппи (), может быть проверено в программе, чтобы выяснить, какое именно действие выбрал пользователь. Так, в окне сообщений пользователю может быть предложено сделать выбор, прежде чем перезаписывать файл, Если пользователь щелкнет иа кнопке Сапсе1, то программа отмеиит перезапись файла.
А если ои выберет кнопку ок, то программа получит разрешение иа перезапись файла. В приведенном ниже примере программы кнопка остановки и окно сообщений вводятся в программу из предыдушего примера. Окно сообщений отображается в обработчике событий от кнопки остановки. В ятом окне пользователю предлагается подтвердить или отменить остановку программы. Если пользователь шелкиет иа кнопке Да, выполиеиие программы будет остановлено. А если ои шелкиет иа кнопке Нет, то выполнение программы продолжится. 956 часть П.
Библиотека С» йрр1гсаггоп.Епавтеугзиа1БСу1ез () к Арр1гсагаоп.апп(зке1) к ) // Обработчик событий от кнопки муВоссоп. ЧО1б МУВиССОПС1ГСК(ОЬБЕСС НЬО, ЕЧЕПСАГБЯ Е) ( гб(МУВпггоп.тор == гса) Мувоггоп.сосаС1оп = пен Рогпг(10, 10)т е1яе Мувоггоп.ьосаС1оп = пен Рогпг(100, ?00)т // Обработчик событий от кнопки БгорВоггоп. чо1б Бгорвоггопс11ск(оЬ)есг нпо, Ечепгйгдз е) ( // Если пользователь подтвердит остановку, // прервать выполнение программы. 01а1очвезо1С гезо1С = Меззадевох.зпон( "Остановить программу?", "Завершение", меззачеВохВоссопя.?евно)т 1Г(гезп1С == 01а1одаезо1г.уез) Арр1гсаггоп.Ехгг() ) ) Рассмотрим подробнее, каким образом в данной программе используется окно сообщений.
Вторая кнопка вводится в конструкторе класса ВОССопрогш. Эта кнопка содержит надпись "Остановка", а обработчик событий от нее реализуется в методе БСорВОССООС11сх () . В методе СорВОССООС1гсх () окно сообщений отображается в следующем операторе: // Если пользователь подтвердит остановкУ, // прервать выполнение программы. 01а1одаезо1С гезо1С = МеззаЧевох.зпон( "Остановить программу?", "Завершение", МеззаЧеВохВпггопз.геено)т В этом операторе выводится сообщение "Остановить программу?" в окне сообщений, а надпись "Завершение" — в его заголовке. Кроме того, в окне сообщения отображаются кнопки Да и Нет.
Значение, возвращаемое методом БЬон (), присваивается переменной геяп1г как результат реакции пользователя на сообщение, выводимое в данном окне. Эта реакция затем анализируется в приведенном ниже операторе с целью определить ход дальнейших действий. 1Г(гезо1С == 01а1одкезо1С.?ез) Арр11сас1оп.Ех1с() Если пользователь щелкнет на кнопке Да, то выполнение программы будет остановлено вызовом метода Арр1гсакгоп.
Ехгг (), который приводит к немедленному ее прерыванию. В противном случае никаких действий не предпринимается, и программа продолжает выполняться далее. Пример вывода на экран при выполнении этой программы приведен на рис. 26.3. реева 26 Создание приложений на основе форм длл 'елпеонв 957 988 часть и. Библиотека сз нительными возможностями и современным внешним видом. Оба этих способа создания меню считаются вполне допустимыми в разработке современных приложений на С(). В связи с этим далее рассматриваются оба способа создания меню.
И первым будет представлен традиционный способ. Создание главного меню в традиционном стиле Главное меню создается в традиционном стиле средствами двух классов. В первом из них, Маъпмепп, инкапсулируется вся структура главного меню, а во втором, Мепи1Сев,— отдельные выбираемые пункты данного меню.
Выбираемый пункт главного меню может обозначать конечное действие, например команду Закрыть, или же активизацию другого, выпадающего меню. Как упоминалось выше, классы МаъпМепп и Мепп1Сев наследуют от класса Мепп. При выборе пункта меню формируется событие С11си, определяемое в классе Мепп1сев. Следовательно, для обработки в программе результатов выбора из меню обработчик событий, связанный с выбираемым пунктом меню, вводится в список обработчиков событий типа О11с)с. У каждой формы имеется свойство меди, определяемое следующим образом: риЫьо МагпМепо Мено ( Чесу веСу По умолчанию ни одно из меню для этого свойства не назначается.
Для отображения создаваемого главного меню оно должно быть установлено в этом свойстве. Процедура создания главного меню довольно проста, хотя и состоит из нескольких пунктов. Ниже приведена процедура, применяемая далее в этой главе. 1. Создайте объект класса Ма1пмепп. 2. Добавьте к объекту типа Маъпмепп объекты класса Мепп1Сев, описывающие пункты главного меню. С этой целью вызывается метод дсЫ () для коллекции, на которую ссылается свойство Мепп1Севз.
3. Добавьте к объекту типа Мепп1сев лазского пункта главного меню список объектов типа Мепп1Сев, определяющих пункты связанного с ним выпадающего меню. С этой целью также вызывается метод дс)с( () для коллекции, на которую ссылается свойство Мепи1Севз. 4. Добавьте обработчики событий для каждого выбираемого пункта меню. 5. Присвойте объект типа Маъпмепи свойству Мепп, связанному с формой. В приведенном ниже примере демонстрируется создание меню Файл, состоящего из трех выбираемых пунктов: Открыть, Закрыть и Выйти. // Создать объект главного меню. Макпиепо Мумепп = пен Ма1пмепи()у // Добавить пункт е главное меню.
Мепо1Сев в1 = пен Мепо1Сев("Файл" ) Муиепи.иепо1Севз.Лбу((в1) у // Создать подменю Файл. Мепо1Сев 1Сев1 = пен Мепи1Сев("Открыть" ) в1.Мепо1Севз.лу)о(ъсев1)у Глава 2Б. Создание приложений на осноае форм длл ()Дпбокз 959 Мепи1сев асев2 = пем Мепи1сев("Закрыть" ) в1.мепи1певл.лоб(апев2)) Мепи1сев 1севз пем Мепи1пев("найти")) в1.иепо1севл.лоб(11евз)л Рассмотрим данный пример более подробно.
Сначала в нем создастся объект типа Муиепп класса Майпиепш Этот объект будет находиться на самом верху структуры меню. Для получения экземпляра этого объекта используется вызываемый по умолчанию конструктор класса Ма1пмепи, в результате чего создается пустое меню. Затем создастся объект в1. Это заглавный пункт меню файл. Он создается с помощью конструктора класса мепптпев: рчш1с Мепи1сев(лсг1пч саРП1оп) где сарп1оп обозначает текст, отображаемый в пункте меню.
В данном случае это надпись "Файл". Данный пункт меню затем добавляется непосредственно к объекту типа мумепо и становится самым верхним пунктом, выбираемым из меню. Обратите внимание на то, что объект в1 добавляется к объекту типа мумепп с помощью доступного только для чтения свойства Ме пот сева. Это свойство представляет собой коллекцию элементов, из которых как из пунктов образуется меню.
Свойство Мепп1певз определяется в классе Мепи, а это означает, что оно частично относится к обоим классам, Ма1пмепп и Мепотсев. Ниже приведена общая форма объявления данного свойства. ри)З11с Мели.Мепч11евСо11ессьоп Мепо1певл ( дес) ) Для того чтобы добавить пункт в меню, достаточно вызвать метод Абб() для свойства мепи1гевэ, передав этому методу ссылку на добавляемый пункт меню, как показано в приведенном выше примере. Далее создается выпадающее меню, связанное с меню Файл.