2011-12-28 26 views
7

我使用下面的代碼添加一個處理程序,文本框:添加/刪除處理程序,文本框

private void frmLogin_Load(object sender, EventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown += new KeyEventHandler(TextBox_KeyDown); 
     }  
    } 
} 

我使用下面的代碼也刪除處理程序:

private void frmLogin_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown -= new KeyEventHandler(TextBox_KeyDown); 
     } 
    } 
} 

是正確的方法或有更好的選擇嗎?

回答

5

這是件好事,但你不需要刪除的處理程序,並添加處理程序只是把這個:

tb1.KeyDown += TextBox_KeyDown; 

因爲new KeyEventHandler(TextBox_KeyDown);是多餘的。

+0

我知道編譯器使用新的KeyEventHandler創建了添加處理程序,但是我的重構工具告訴我這是冗餘委託創建。 – Piyey 2011-12-28 15:58:51

2

要刪除的事件處理程序,你應該只是做:

tb1.KeyDown -= TextBox_KeyDown; 
4

你的做法是好的。在添加和刪除事件處理程序代理時,可以省略new KeyEventHandler和圍繞TextBox_KeyDown的括號括起來。這些由編譯器暗示(只要TextBox_KeyDown方法具有預期的簽名)。當然這完全是一個偏好問題。

3

是的,這是完全正確的。但是,您可以使用速記符號:

tb1.KeyDown -= TextBox_KeyDown; 

雖然效果完全相同。

但是,值得確定你是否真的需要刪除你的事件處理程序?你的表單和TextBox的生命週期是什麼?如果表單擁有TexBox,即它已經存在較長時間,那麼您不需要刪除事件處理程序。

相關問題