2012-02-19 70 views
0

正如你所看到的系統菜單,他們有這樣的語法:系統菜單和委託

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

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

撰寫活動對於Click事件,我可以做這樣的事情?怎麼樣 ?

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

所以在MyMenuItemEventArgs,我可以通過我的opearion到operates.in這種情況下,我已經過了「新」一個功能。

我不想寫10個或更多的處理程序,我只想寫一個處理程序與許多事件參數。

+1

線所有的菜單項的使用相同的處理方法,然後用' sender'參數來區分哪個菜單項引發了該事件。將其從「System.Object」轉換爲「MenuItem」。 – 2012-02-19 09:05:00

回答

1

您應該實例化一個新的menuItem,然後使用Click屬性來添加處理程序。

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

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

之後,你可以把它添加到您的菜單:

fileMenuItem.MenuItems.Add(menuItem1); 
+0

我不想製作很多處理程序方法。我只想用一個處理器方法來處理很多事件參數! – sap 2012-02-19 07:09:45

+0

如果您試圖爲許多按鈕按下一個處理程序,那麼您應該使用正在傳遞的「sender」對象作爲參數來指示哪個按鈕已被按下。通過這種方式,您可以在全局處理程序中確定基於所按按鈕執行的操作。如果這是你想達到的。您可以爲每個按鈕分配所需的信息(例如,在您的示例中,您爲該按鈕分配了「新建」)。 – 2012-02-19 07:51:11

1

EventArgs參數的值是由觸發事件,這是在這種情況下MenuItem提供的對象。因此,處理一個處理程序中多個MenuItem對象的OnClick事件的唯一方法是使用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 
    } 
}