我已经形成了八个文本框,现在我希望每当任何用户在任何文本框中执行textchanged事件时,一个按钮被禁用。
我是否需要将 textChanged 事件绑定到所有文本框,还是有更好的方法?
如果以后我想要在我的 winform 中添加更多文本框怎么办?
如果由于某种原因您不想将相同的事件处理程序绑定到设计器中的 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)