2012-02-19 3 views
0

Как вы уже видели системы меню, они имеют синтаксис, как это:меню системы и делегаты

MainMenu mainMenu = new MainMenu(); 
MenuItem fileMenuItem = new MenuItem("File"); 

mainMenu.MenuItems.Add(fileMenuItem); 
this.Menu = mainMenu; 

написать События на кликах, я могу сделать что-то вроде этого? как ?

fileMenuItem.MenuItems.Add(new MenuItem("New", 
MyMenuItemEventArgs(this, new MyMenuItemEventArgs("New"))) 

Так в MyMenuItemEventArgs, я могу передать мое opearion к одной функции, которая operates.in этого случая я прошел «Новый».

Я не хочу писать 10 или более обработчиков, я хочу просто написать один обработчик со многими событиями args.

+1

провода все пункты меню, чтобы использовать тот же метод обработчика, а затем использовать ' sender', чтобы определить, какой пункт меню поднял событие. Внесите его из 'System.Object' в' MenuItem'. –

ответ

1

Вы должны создать экземпляр нового элемента меню, а затем использовать атрибут Click для добавления обработчика.

MenuItem menuItem1=new MenuItem("Item text"); 

menuItem1.Click += new System.EventHandler(handler_method); 

После этого вы можете добавить его в меню:

fileMenuItem.MenuItems.Add(menuItem1); 
+0

Я не хочу делать много методов обработчика. Я хочу использовать только один метод обработчика со многими аргументами событий! – sap

+0

Если вы пытаетесь использовать один обработчик для многих нажатых кнопок, вам следует использовать объект «отправитель», который передается в качестве параметра, чтобы указать, какая кнопка была нажата. таким образом, вы можете определить в своем глобальном обработчике, какие действия следует предпринять на основе нажатия кнопки. ЕСЛИ это то, чего вы хотите достичь. Вы можете назначить каждой кнопке нужную вам информацию (например, в вашем примере, которую вы присвоили этой кнопке «Создать»). –

1

Значение параметра EventArgs обеспечивается объектом стрельбы событие, которое в данном случае MenuItem. Таким образом, единственный способ обработки события OnClick нескольких объектов MenuItem в одном обработчике - это параметр sender. Вы можете проверить, какой пункт меню была нажата, используя код вроде этого:

var mainMenu = new MainMenu(); 
var fileMenuItem = new MenuItem("file"); 
var openMenuItem = new MenuItem("open", OnClick); 
var exitMenuItem = new MenuItem("exit", OnClick); 

openMenuItem.Name = "open"; 
exitMenuItem.Name = "exit"; 

fileMenuItem.MenuItems.Add(openMenuItem); 
fileMenuItem.MenuItems.Add(exitMenuItem); 

mainMenu.MenuItems.Add(fileMenuItem); 
this.Menu = mainMenu; 

И в обработчик события:

private void OnClick(object sender, EventArgs eventArgs) 
{ 
    var senderName = ((MenuItem) sender).Name; 
    if (senderName == "open") 
    { 
     //open was clicked 
    } 
    else if (senderName == "exit") 
    { 
     //exit was clicked 
    } 
} 
Смежные вопросы