向文本框添加/删除处理程序
我正在使用以下代码向文本框添加处理程序:
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;