sqlchild
sqlchild

Reputation: 9064

empty textbox controls after the data is inserted / saved/ submitted in a c# winform application

I need to empty all the textbox controls after the SAVE button is clicked but the user. I have around 10 of them. How do i clear text from them all simultaneously. I just know about:

textbox1.Text="";

But, if i do this, then i need to repeat this for the no. of textbox controls on my Form, that would be a labor task instead of programmer?

Please guide.

Upvotes: 5

Views: 7181

Answers (4)

Mel
Mel

Reputation: 2385

If you want to clear everything on the form, I would suggest a pair of utility function such as:

public static void ClearAllControls(Control.ControlCollection controls)
{
    foreach (var control in controls)
        ClearAllControls(control);
}

public static void ClearAllControls(Control control)
{           
    var textBox = control as TextBox
    if (textBox != null)
    {
        textBox.Text = null;
        return;
    }

    var comboBox = control as ComboBox;
    if (comboBox != null)
    {
        comboBox.SelectedIndex = -1;
        return;
    }

    // ...repeat blocks for other control types as needed

    ClearAllControls(control.Controls);
}

Call the first method, passing the form's Controls collection, and it will recursively drill down through panels, groups, etc, clearing all the controls it knows about. You'll have to add a block for each different control type, but at least you only have to do it once. It's a bit brute-force, but it's not the kind of code that ends up running in a loop, and it runs plenty fast, anyway.

The final line, which does the recursion, will only be reached if the current control being worked on hasn't already proven to be one of the known types, so you don't have to worry about accidentally "drilling into" things like TextBoxes, looking for child controls that won't be there.

Upvotes: 2

Stecya
Stecya

Reputation: 23266

Try this

foreach(TextBox textbox in this.Controls.OfType<TextBox>())
{
   textbox.Text = string.Empty;
}

If you want recursivly clear all textboxes use this function.

void ClearTextBoxes(Control control)
{
    foreach(Control childControl in control.Controls)
    {
         TextBox textbox = childControl as TextBox;
         if(textbox != null)
            textbox.Text = string.Empty;
         else if(childControl.Controls.Count > 0)
             ClearTextBoxes(childControl);
    }
}

Upvotes: 8

ColinE
ColinE

Reputation: 70122

You could use the Linq API described in the following article:

http://www.codeproject.com/KB/linq/LinqToTree.aspx#linqforms

This allows you to apply Linq-to-XML style queries on Windows Forms. The following will clear all the TextBox controls that are descendants of 'this':

foreach(TextBox textbox in this.Descendants<TextBox>()
                               .Cast<TextBox>())
{
   textbox.Text = string.Empty;
}

Upvotes: 2

Alex Aza
Alex Aza

Reputation: 78457

If you have all the textboxes on a form without panels or group boxes, you can do this:

foreach (var conrol in Controls)
{
    var textbox = conrol as TextBox;
    if (textbox != null)
        textbox.Clear();
}

If you have a panel, use panel.Controls instead.

Upvotes: 2

Related Questions