向文本框添加/删除处理程序

我正在使用以下代码向文本框添加处理程序:

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); } } } 

是正确的方法还是有更好的选择?

这很好,但你不需要删除处理程序,并添加处理程序只是把它:

 tb1.KeyDown += TextBox_KeyDown; 

因为new KeyEventHandler(TextBox_KeyDown); 是多余的。

你的方法很好。 在添加和删除事件处理程序委托时,可以省略TextBox_KeyDown周围的new KeyEventHandler和周围括号。 这些是编译器隐含的(只要TextBox_KeyDown方法具有预期的签名)。 当然,这纯粹是一个偏好的问题。

是的,这是完全正确的。 但是您可以使用简写表示法:

 tb1.KeyDown -= TextBox_KeyDown; 

虽然效果完全一样。

但是,确定是否确实需要删除事件处理程序是值得的? 表单和TextBox的生命周期是什么? 如果表单’拥有’TexBox,即它更长寿,那么你不需要删除事件处理程序。

要删除事件处理程序,您应该这样做:

 tb1.KeyDown -= TextBox_KeyDown;