2012-05-23 34 views
5

Para borrar mis cuadros de texto que estaba usando el siguiente código en un formulario:Comprobar si el control de cuadro de texto está dentro de TabControl

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

Pero ahora mis cuadros de texto residen dentro de un TabControl. ¿Cómo puedo ejecutar este mismo tipo de verificación para los cuadros de texto, y si el control es un cuadro de texto, establezca el valor en "". Ya he intentado usar:

foreach(Control c in tabControl1.Controls) 

Pero esto no funcionó.

Respuesta

11

uso de este

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

tabControl1.Los controles no funcionarán porque el control de tabulación contiene TabPage s. Debes apuntar a la página correcta.

Alternativamente se puede construir un método recursivo para hacerlo:

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

También puede utilizar Enumerable.OfType. TextBox y RichTextBox son los únicos controles que heredan de TextBoxBase, este es el tipo que está buscando:

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

Limpiar Controles

 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; 
      } 
     } 
Cuestiones relacionadas