Cancella più caselle di testo con un pulsante in C #

Io uso .NET Framework 4.

Nella mia forma, ho 41 caselle di testo.

Ho provato con questo codice:

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

E questo codice:

 private void ClearTextBoxes(Control.ControlCollection cc) { foreach (Control ctrl in cc) { TextBox tb = ctrl as TextBox; if (tb != null) tb.Text = String.Empty; else ClearTextBoxes(ctrl.Controls); } } 

Questo ancora non funziona per me.

Quando ho provato a cancellare con questo codice TextBoxName.Text = String.Empty; il successo della casella di testo è stato cancellato ma una casella di testo aveva ancora 40 caselle di testo.

Come lo risolvo?

MODIFICARE

Ho inserito questo:

 private void btnClear_Click(object sender, EventArgs e) { ClearAllText(this); } void ClearAllText(Control con) { foreach (Control c in con.Controls) { if (c is TextBox) ((TextBox)c).Clear(); else ClearAllText(c); } } 

ma ancora non funziona.

modificare

Immagine

Ho usato pannelli e splitter.

 void ClearAllText(Control con) { foreach (Control c in con.Controls) { if (c is TextBox) ((TextBox)c).Clear(); else ClearAllText(c); } } 

Per usare il codice sopra, fai semplicemente questo:

 ClearAllText(this); 

Hai provato

  private void RecursiveClearTextBoxes(Control.ControlCollection cc) { foreach (Control ctrl in cc) { TextBox tb = ctrl as TextBox; if (tb != null) tb.Clear(); else RecursiveClearTextBoxes(ctrl.Controls); } 

Passaggio 1: è necessario esaminare tutti i Controls nel Form .

Step2: se un Control è un TextBox chiama la funzione Clear() .

Prova questo:

  void clearText(Control control) { foreach (Control c in control.Controls) { if (c is TextBox) ((TextBox)c).Clear(); else clearText(c); } } public void ModifyControl(Control root, Action action) where T : Control { if (root is T) action((T)root); // Call ModifyControl on all child controls foreach (Control control in root.Controls) ModifyControl(control, action); } private void button5_Click(object sender, System.EventArgs e) { clearText(this); ModifyControl(splitContainer1, tb => tb.Text = ""); } 

Questo funziona abbastanza bene per me stesso.

 void ClearTextBoxes(DependencyObject dObject) { TextBox tb = dObject as TextBox; if (tb != null) tb.Text = null; foreach (DependencyObject obj in dObject.GetChildObjects()) ClearTextBoxes(obj); } 

E poi chiamalo semplicemente come desideri, ad esempio, sto cancellando tutti i TextBox in un TabControl, che include anche i tab non sullo schermo:

 ClearTextBoxes(CustomerTabControl);