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

20 c# textbox winforms

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

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

有任何想法吗?

Hom*_*mam 61

我喜欢lambda :)

 private void ClearTextBoxes()
 {
     Action<Control.ControlCollection> func = null;

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

     func(Controls);
 }
Run Code Online (Sandbox Code Playgroud)

祝好运!


Mat*_*ten 6

几周前我们遇到过这样的问题.如果你设置一个断点并深入研究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);
    }
}
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 3

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

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