在winforms中为文本框设置TextChanged事件

时间:2010-12-20 01:54:21

标签: c# .net winforms

我有8个文本框,现在我希望每当任何用户在任何文本框中执行 textchanged 事件时,按钮都会被禁用。

我是否需要将textChanged事件绑定到所有文本框,还是有更好的方法?

如果以后我想在winforms中添加更多文本框怎么办?

1 个答案:

答案 0 :(得分:4)

如果由于某种原因您不想将相同的事件处理程序绑定到设计器中的8个以上的文本框,则可以在Form加载事件上以编程方式执行此操作:

private void MainForm_Load(object sender, EventArgs e)
{
    foreach (Control maybeTextBox in Controls)
    {
         if (maybeTextBox is TextBox)
         { 
             maybeTextBox.TextChanged += new EventHandler(maybeTextBox_TextChanged);
         }
    }
}

唯一的问题是,如果任何TextBox都在另一个控件中,你需要编写一个这样的递归find方法:

public static Control[] GetControls(Control findIn)
{
    List<Control> allControls = new List<Control>();
    foreach (Control oneControl in findIn.Controls)
    {
        allControls.Add(OneControl);
        if (OneControl.Controls.Count > 0)
            allControls.AddRange(GetControls(oneControl));
    }
    return allControls.ToArray();
}

您可以在表单上调用该方法,因此原始代码将变为:

foreach (Control maybeTextBox in GetControls(this))