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

时间:2011-01-26 23:13:41

标签: c# winforms textbox

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

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

有什么想法吗?

10 个答案:

答案 0 :(得分: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);
 }
祝你好运!

答案 1 :(得分: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);
    }
}

答案 2 :(得分:4)

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

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

答案 3 :(得分:4)

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')。

答案 4 :(得分:3)

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

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();
            }
        }
    }
}

答案 5 :(得分:2)

这用于清除文本框,复选框,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;
            }
        }
    }

答案 6 :(得分:0)

试试这个:

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

答案 7 :(得分:0)

也许您想要更简单,更简短的方法。这也将清除所有TextBoxes。 (除了Panel或GroupBox内的TextBoxes)。

 foreach (TextBox textBox in Controls.OfType<TextBox>())
    textBox.Text = "";

答案 8 :(得分:0)

您可以尝试使用此代码

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {


        if(keyData==Keys.C)
        {
            RefreshControl();
            return true;
        }


        return base.ProcessCmdKey(ref msg, keyData);
    }

答案 9 :(得分:0)

 groupBoxName.Controls.OfType<TextBox>().ToList().ForEach(t => t.Clear());