我正在使用以下代码向文本框添加处理程序:
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);
}
}
}
是正确的方式还是有更好的选择?
答案 0 :(得分:6)
这很好,但你不需要删除处理程序,添加处理程序就是这样:
tb1.KeyDown += TextBox_KeyDown;
因为new KeyEventHandler(TextBox_KeyDown);
是多余的。
答案 1 :(得分:4)
你的方法很好。在添加和删除事件处理程序委托时,您可以省略new KeyEventHandler
周围TextBox_KeyDown
及其周围的括号。这些都是编译器隐含的(只要TextBox_KeyDown
方法具有预期的签名)。当然,这纯粹是一个偏好的问题。
答案 2 :(得分:3)
是的,这是完全正确的。但是,您可以使用简写符号:
tb1.KeyDown -= TextBox_KeyDown;
虽然效果完全一样。
但是,确定是否真的需要删除事件处理程序是值得的?表单和TextBox的生命周期是什么?如果表单'拥有'TexBox,即它更长寿,那么你不需要删除事件处理程序。
答案 3 :(得分:2)
要删除事件处理程序,您应该这样做:
tb1.KeyDown -= TextBox_KeyDown;