Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 157

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 151 152 153 154 155 156 < 157 > 158 159 160 161 162 163 .. 320 >> Следующая

!private void FileExit_Clicked(object sender, EventArgs e) {
thiE,.Closed; Il Выход ИЗ приложения
}
}
Добавляем еще одно меню верхнего уровня
Предположим, что техническое задание на наш проект изменилось: теперь кроме меню FUe > Exit нам необходимо создать еще одно меню верхнего уровня Help (Справка) с единственным пунктом About (0 программе). Выглядеть все это должно так, как представлено на рис. 8.23.
1
Application. Run(new MainFormO):
380 Глава 8 • Окна становятся лучше: введение в Windows.forms
Создаем контекстное меню
Создавать обычные ниспадающие меню мы уже научились. Однако в приложениях часто используется и другой вид меню — контекстные (pop-up), которые открываются по щелчку правой кнопкой мыши. Контекстные меню создаются при помощи класса ContextMenu. Как и в случае с ¦ наша задача — добавить объек-
ты Menultem в коллекцию MenuItemCol lection внутри объекта ContextMenu. В приведенном ниже примере контекстное меню позволяет пользователю выбрать размер шрифта для текстовой строки, выводимой на форму:
namespace NaliForu) {
II Вспокогательная структура для установки размера шрифта internal struct TheFontSize
1
public static int Huge = 30: public static int Normal = 20: public static int Tiny = 8:
}
public class MainForm : Form { •
П Исходный размер шрифта
private int currFontSize = TheFontSize.Normal:
ft Контекстное меню формы private ContextMenu popUpMenu:
public static void 'тъ'уъгпщП args) {
Application.Run(new MainFormO);
}
public class M;ni,Fonn : Form {
private MainMenu mainMenu;
public jainfonnO {
Il Создаем иеню File > Exit
Menultem iDiFile = mainMenu.Menultems.AddC'&File");
mi Fi 1 e. Menu Items. Add (new Menu I tern("ESxi t".
new EventHandler(tliis.FileExit_Clicked). Shortcut.CtrlX)):
Il А теперь - еще и иеню Help > About
Menultem raiHelp = mainMenu.Menultems.AddC'Help"); rniHelp.Menultems.Add(new MenuItem("&/bout",
new EwntHaitfer<this.r.e?pAbcut_a. Shortcut.CtrU));
}
Il И обработчик события для Help > About
private void HelpAbout_Click:ed(object sender. EventArgs e)
{
MessageBox.ShowC'The amazing menu app..."):
}
}
Код приложения Siiiipli-Moiiiiможно найти в подкаталоге Chapter 8.
Создание системы меню в приложении 381
private vdd Max<*onsJfcst2e(ot>jiftct sender. System. EventArgs e) {
InvalidateO;
)
public MainFormO 1
II Прежде всего создаем контекстное неню
popUpHenu = new ContextMenuO;
Il Теперь добавляем в контекстное неню элементы popUpttenu. MenuIterns. Add("Huge", new EventHandler(PupUp_Clі eked)) popUpMenu.MenuItems.AddC'Mormal". new EventHand1er(PopUp_Clicked>) ¦ popUpMenu.MenuIterns.Add("Tiny", new EventHandler(PopUp_Clicked));
Il Теперь подклмчаен контекстное неню к форме this.CorrtextMenu = popUpMenu:
И Ставим обработчики событий
this.Resize += new System.EventHandler(trns.MainForm_Resize); this. Paint new PaintEventHaridlertthis.MainForm Paint):
}
II Обработчик для PopUp_C licked (всех трех пунктов) private void Popup Cl і eked (object sender. EventArgs e)
{
]
// Ориентируемся на строковое пня выбранного пользователе» элемента
// неню
Menultem miClicked - (MenuItem)sendeг; string item = nrC! eke<Uext
ifCitem = - "Huge")
currFontSize = TheFontSize.Huge: 1 ftlteffl = - "Normal")
currFontSize = TheFontSize. Normal ; IfC 1tem = " "Tiny")
currFontSize = TheFontSize. Tiny: InvalidateO:
private void iHainFornJelitfeoject sender, PaintEventArgs {
Graphics g = e.Graphics; g.DrawString("Please click on me...".
new Font("Times New Roman", (f loaUcurrFontSize),
new SolidBrush(Color.Black),
thi s.Oi splayRectangle);
}
I
}
Обратите внимание, что для всех элементов контекстного меню мы назиачї -ли один-единственный общий для всех обработчик событий. При выборе пользователем любого пункта в контекстном меню запускается один и тот же метод
PopUp_Cl і eked О. Но, конечно, нам все-таки надо реагировать на разные пункты меню по-разному. Для этого мы используем значение свойства Text передаваемого обработчиком событий объекта sender (предварительно приведенного к типу Menultem),, Далее в зависимости от значения этого свойства выбирается нужное действие. Все
382 Глава 8 • Окна становятся лучше: введение Е; Windows.Forms
работает просто замечательно, хотя, пожалуй, со:¦ дампе версии приложения с интерфейсом на другом языке потребует дополнительных усилий:
// Обработчик для PopUp_Cl1cked (всех трех пунктов) private void PopUpJliCked(object sender. EventArgs J-
II Ориентируемся на строковое иня выбранного пользователей элемента иене Menultem miCHeked - (Henultem)sender; string item = m1CI1ck.ed.Text:
tfdten - = "Huge")
currFontSize = TheFontSize.Huge; ifdtem = = "Normal")
currFontSize - TheFontSize.Normal; if {item = - "Tiny")
currFontSize = TheFontSize. Tiny;
Il А это - чтобы перерисовать форму с новый шрифтом для текста на ней: Invalidated:
}
Еще один момент, на который стоит обратить в нимание. После создания объекта ContextMenu мы подключаем его к форме при помощи свойства ContextMenu, определенного в классе Control. Это значит, что контекстное меню может быть у всех объектов, производных от класса Control, то есть у всех элементов управления. Например, если нам этого хочется, отдельное контекстное меню может быть у любой кнопки в диалоговом окне. Появляться это контекстное меню будет только при щелчке правой кнопкой мыши на области, занимаемой данной кнопкой.
Предыдущая << 1 .. 151 152 153 154 155 156 < 157 > 158 159 160 161 162 163 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100