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

Dus*_*usk 2 .net c# winforms

我已经形成了八个文本框,现在我希望每当任何用户在任何文本框中执行textchanged事件时,一个按钮被禁用。

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

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

Mig*_*ell 5

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

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

唯一的问题是,如果任何 TextBoxes 位于另一个控件内,您将需要编写一个递归 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();
}
Run Code Online (Sandbox Code Playgroud)

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

foreach (Control maybeTextBox in GetControls(this))
Run Code Online (Sandbox Code Playgroud)