2013-04-30 54 views
4

我有這樣的代碼,我連接到托盤圖標的DoubleClick事件我的應用程序:一個功能兩個事件

ni.DoubleClick += 
    delegate(object sender, EventArgs args) 
     { 
      this.MainWindow.Show(); 
     }; 

但是,是否有可能使用此代碼爲兩個事件(DoubleClickClick ),如下所示:

ni.DoubleClick, ni.Click += 
    delegate(object sender, EventArgs args) 
     { 
      this.MainWindow.Show(); 
     }; 

只是爲了最小化代碼大小和可讀性。謝謝

回答

5

只需創建EventHandler:n可以用匿名方法語法被簡化。

EventHandler e = (sender, args) => this.MainWindow.Show(); 
ni.DoubleClick += e; 
ni.Click += e; 
5

不,但您可以使它成爲標準的非匿名函數,並將其用於兩個事件。

+0

奧凱:(感謝快速回答 – 2013-04-30 14:39:14

21

將異常處理程序在它自己的功能:

private void ClickHandler(object sender, EventArgs args) 
{ 
    this.MainWindow.Show(); 
} 

再用鋼絲起來,以這兩個事件:

ni.DoubleClick += ClickHandler; 
ni.Click += ClickHandler; 
4

只是把它分配給事先變量:

EventHandler eventHandler = delegate(object sender, EventArgs args) 
    { 
     this.MainWindow.Show(); 
    }; 

ni.DoubleClick += eventHandler; 
ni.Click += eventHandler; 

順便說一句,事件處理程序definitio使用λ表達式,並將其添加到這兩個事件

EventHandler eventHandler = (s, e) => this.MainWindow.Show(); 
+1

這也將工作,但要注意你需要守住事件處理程序變量,如果你以後想從事件註銷。 – 2013-04-30 14:40:36

+0

@MattGreer也是如此與他在OP中使用的代碼我發現只有一小部分這樣的處理程序需要取消訂閱,並且在這種情況下處理它們並不難。 – Servy 2013-04-30 14:41:35

+0

@MattGreer:根據問題,這不是他他的當前解決方案有一個事件不允許取消註冊 – 2013-04-30 14:42:00