【问题标题】:Add/Remove handler to textbox向文本框添加/删除处理程序
【发布时间】:2011-12-28 15:05:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net event-handling handler


    【解决方案1】:

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

    tb1.KeyDown += TextBox_KeyDown;
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        是的,这是完全正确的。但是,您可以使用简写符号:

        tb1.KeyDown -= TextBox_KeyDown;
        

        虽然效果一模一样。

        但是,值得确定您是否真的需要删除您的事件处理程序?您的表单和文本框的生命周期是什么?如果表单“拥有”TexBox,即它的寿命更长,那么您不需要删除事件处理程序。

        【讨论】:

          【解决方案4】:

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

          tb1.KeyDown -= TextBox_KeyDown;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-06
            • 2016-06-06
            • 2012-05-13
            • 1970-01-01
            • 1970-01-01
            • 2011-06-15
            • 2012-05-10
            相关资源
            最近更新 更多