我有8个文本框,现在我希望每当任何用户在任何文本框中执行 textchanged 事件时,按钮都会被禁用。
我是否需要将textChanged事件绑定到所有文本框,还是有更好的方法?
如果以后我想在winforms中添加更多文本框怎么办?
答案 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))