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

时间:2011-12-28 15:05:45

标签: c# .net event-handling handler

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

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

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

4 个答案:

答案 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;