如何清除表单中所有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 = ""; }