Interando sobre controles.

21/04/2006 - 21:36 por José Miguel Torres | Informe spam
Hola, estoy iterando sobre los controles de una pantalla para obtener sus
valores, hasta ahora todo iva bien, pero necesito agregar un tabcontrol, como
el código está dentro de un form del cual heredan muchos otros quisiera
preveer que el contenedor no sea solo un tabcontrol sino que podría ser
cualquier otro contenedor. Así que primero tenía este código.

foreach(Control c in this.Controls)
if(c.GetType().ToString()=="System.Windows.Forms.TabControl")
foreach(Control c in( (TabControl)c).Controls)
..

Pero entonces debería hacer un if para cada tipo de contender posible.

Revisando los controles veo que todos tienen la propiedad .Controls así que
ahora estoy tratando de hacer algo así:

if( ((Type.GetType(c.getType()))c).Controls.Count>0)

Pero esto ya no compila. En sintesis necesito poder iterar sobre todos los
controles de un form y ademas si este un control que contiene asú vez
controles iterar sobre los mismos y tal vez uno de los controles dentro de
este contenedor sea un contendor a su vez. Esto sin importar el tipo de
control que sea.
Espero haberme explicado bien y que alguien me pueda dar una mano.

Gracias.
 

Leer las respuestas

#1 Octavio Hernandez
21/04/2006 - 23:52 | Informe spam
Jose Miguel,

Dado que el nivel de anidamiento puede ser infinito, necesitas un método
recursivo como éste:

private void button1_Click(object sender, EventArgs e)

{

RecorrerControles(this);

}

void RecorrerControles(Control c)

{

MessageBox.Show(c.Name);

if (c.Controls.Count > 0)

foreach (Control x in c.Controls)

RecorrerControles(x);

}

Salu2 - Octavio



"José Miguel Torres" escribió en
el mensaje news:
Hola, estoy iterando sobre los controles de una pantalla para obtener sus
valores, hasta ahora todo iva bien, pero necesito agregar un tabcontrol,
como
el código está dentro de un form del cual heredan muchos otros quisiera
preveer que el contenedor no sea solo un tabcontrol sino que podría ser
cualquier otro contenedor. Así que primero tenía este código.

foreach(Control c in this.Controls)
if(c.GetType().ToString()=="System.Windows.Forms.TabControl")
foreach(Control c in( (TabControl)c).Controls)
..

Pero entonces debería hacer un if para cada tipo de contender posible.

Revisando los controles veo que todos tienen la propiedad .Controls así
que
ahora estoy tratando de hacer algo así:

if( ((Type.GetType(c.getType()))c).Controls.Count>0)

Pero esto ya no compila. En sintesis necesito poder iterar sobre todos los
controles de un form y ademas si este un control que contiene asú vez
controles iterar sobre los mismos y tal vez uno de los controles dentro de
este contenedor sea un contendor a su vez. Esto sin importar el tipo de
control que sea.
Espero haberme explicado bien y que alguien me pueda dar una mano.

Gracias.

Preguntas similares