2011-10-12 27 views
0

我只是創建一個文本菜單..C#如何使用EventHandler?

在這條線,我不知道我將在第三PARAM放(或更好:我怎麼也形成它-syntaxly-):

(contextMenuStrip.Items[0] as System.Windows.Forms.ToolStripMenuItem).DropDownItems.Add(contextUnterMenuStrip.Items.Add(exe),null, HERE); 

上 '這裏' 我必須設置EventHandler的onClick

通過實例,我得到這個方法:

public void DoSomething() 
{ 
//... 
} 

我怎麼稱呼這個方法? (在事件處理程序?)還是我必須做出一個方法,如:

private void button_Click(object sender, RoutedEventArgs e) 
{ 
    //... 
} 
+1

您需要創建的按鈕相匹配的點擊事件的簽名的事件處理程序你正在創造。您需要讓DoSomething接受'object sender,EventArgs e'或者只需在'button_Click'事件中調用DoSomething。 –

+0

是的,我知道..但如何調用然後DoSomething(對象發件人,RoutedEventArgs e)..在第三個參數(這裏),當我把DoSomething它wouldnt工作和DoSomething()2不工作.. – eMi

+1

避免混合WPF和Winforms。 –

回答

2

不要「調用」的方法,但採取其地址。這意味着省略()

private void menuItem1_Click(object sender, EventArgs e) 
{ 
    //... 
} 


// your code, I think it misses a few ')' 
... (contextMenuStrip.Items[0] as System.Windows.Forms.ToolStripMenuItem) 
     .DropDownItems.Add(contextUnterMenuStrip.Items 
     .Add(exe),null, menuItem1_Click); 
+0

它的EventArgs,而不是RoutedEventArgs ..但我做到了.. thx 4的幫助 – eMi

1

,你可以see here,回調必須具有以下原型:

public delegate void EventHandler(Object sender, EventArgs e) 

所以你的方法DoSomething的有看起來像:

private void DoSomething(object sender, EventArgs e) 
{ 
    //... 
} 
+0

thx以及我現在在第三個參數('HERE')中如何調用此方法? – eMi

+0

你不必打電話給它。當任何人點擊ToolStripDropDownItem時它會被調用。 – PVitt

+0

我不得不這樣做,什麼Henk告訴,但它必須是EventArgs,他使用RoutedEventArgs,那不工作)...但現在我做了它,thx – eMi

0

可以使用LINQ的圖書館創建一個匿名事件處理程序,並調用你的方法途徑。這可以是一個很好的快捷方式(特別是如果它只是一個測試項目)。但是,如果您開始廣泛使用它,則可能難以閱讀它。

這方面的一個例子是:

var menuItem1 = new MenuItem(); 
menuItem1.Click += (sender, e) => DoSomething(); 

這裏指的進一步信息,使用LINQ:http://msdn.microsoft.com/library/bb308959.aspx