2012-05-23 8 views
5

Per cancellare le mie caselle di testo che stavo usando il seguente codice in un modulo:Controllare se Control è Casella di testo all'interno di TabControl

foreach (Control c in this.Controls) 
{ 
    if (c is TextBox || c is RichTextBox) 
    { 
     c.Text = ""; 
    } 
} 

Ma ora le mie caselle di testo risiede all'interno di un TabControl. Come posso eseguire questo stesso tipo di controllo per le caselle di testo e se il controllo è una casella di testo, impostare il valore su "". Ho già provato a utilizzare:

foreach(Control c in tabControl1.Controls) 

Ma questo non ha funzionato.

risposta

11

uso questo

foreach (TabPage t in tabControl1.TabPages) 
{ 
    foreach (Control c in t.Controls) 
    { 
     if (c is TextBox || c is RichTextBox) 
     { 
      c.Text = ""; 
     } 
    } 
} 
1

tabControl1.Controls non funziona perché il controllo struttura a schede contiene TabPage s. Devi scegliere come target la pagina corretta.

In alternativa si può costruire un metodo ricorsivo per farlo:

static void RecurseClearAllTextBoxes(Control parent) 
{ 
    foreach (Control control in parent.Controls) 
    { 
     if (control is TextBox || control is RichTextBox) 
      control.Text = String.Empty; 
     else 
      RecurseClearAllTextBoxes(control); 
    } 

    if (parent is TabControl) 
    { 
     foreach (TabPage tabPage in ((TabControl)parent).TabPages) 
      RecurseClearAllTextBoxes(tabPage); 
    } 
} 
5

È anche possibile utilizzare Enumerable.OfType. TextBox e RichTextBox sono gli unici controlli che ereditano da TextBoxBase, questo è il tipo che stai cercando:

var allTextControls = tabControl1.TabPages.Cast<TabPage>() 
    .SelectMany(tp => tp.Controls.OfType<TextBoxBase>()); 
foreach (var c in allTextControls) 
    c.Text = ""; 
1

limpiar Controlli

 foreach (Control C in GB.Controls) 
     { 
      if(C is TextBox) 
      { 
       (C as TextBox).Clear(); 
      } 
      if(C is DateTimePicker) 
      { 
       (C as DateTimePicker).Value = DateTime.Now; 
      } 
      if (C is ComboBox) 
      { 
       (C as ComboBox).SelectedIndex = 0; 
      } 
     }