如何清除表单中所有textBox的文本?

private void CleanForm() { foreach (var c in this.Controls) { if (c is TextBox) { ((TextBox)c).Text = String.Empty; } } } 

上述方法不起作用,并且不清除控件。 编译很好,但什么都不做。

有任何想法吗?

我喜欢lambda 🙂

  private void ClearTextBoxes() { Action func = null; func = (controls) => { foreach (Control control in controls) if (control is TextBox) (control as TextBox).Clear(); else func(control.Controls); }; func(Controls); } 

祝好运!

几周前我们遇到过这样的问题。 如果你设置一个断点并深入研究this.Controls ,问题就会揭示它的本质:你必须通过所有子控件来递归。

代码可能如下所示:

 private void CleanForm() { traverseControlsAndSetTextEmpty(this); } private void traverseControlsAndSetTextEmpty(Control control) { foreach(var c in control.Controls) { if (c is TextBox) ((TextBox)c).Text = String.Empty; traverseControlsAndSetTextEmpty(c); } } 

您的文本框可能位于面板或其他容器内,而不是直接位于窗体内。

您需要以递归方式遍历每个子控件的Controls集合。

 private void CleanForm(Control ctrl) { foreach (var c in ctrl.Controls) { if (c is TextBox) { ((TextBox)c).Text = String.Empty; } if( c.Controls.Count > 0) { CleanForm(c); } } } 

当你最初调用ClearForm时,传入this或者Page(我认为这就是’this’)。

这用于清除文本框,复选框,radioButton等窗体中的所有控件

你可以添加你想要的不同类型..

 private void ClearTextBoxes(Control control) { foreach (Control c in control.Controls) { if (c is TextBox) { ((TextBox)c).Clear(); } if (c.HasChildren) { ClearTextBoxes(c); } if (c is CheckBox) { ((CheckBox)c).Checked = false; } if (c is RadioButton) { ((RadioButton)c).Checked = false; } } } 

我改进/修复了我的扩展方法。

 public static class ControlsExtensions { public static void ClearControls(this Control frm) { foreach (Control control in frm.Controls) { if (control is TextBox) { control.ResetText(); } if (control.Controls.Count > 0) { control.ClearControls(); } } } } 

试试这个:

 var t = Form.Controls.OfType().AsEnumerable(); foreach (TextBox item in t) { item.Text = ""; }