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.

Preguntas similare

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.

Respuesta Responder a este mensaje
#2 Jose Fernandez
20/06/2006 - 20:22 | Informe spam
Hola
para optimizar el codigo de Octavio...

void RecorrerControles(Control c)
{
MessageBox.Show(c.Name);
if (c.Controls.Count > 0) // NO SE NECESITA ESTA CONDICION PUES EN LA
OTRA LINEA
foreach (Control x in c.Controls) // YA CON ESTO ES SUFICIENTE. SI
LA COLLECTION ES 0 NO ENTRA
RecorrerControles(x);
}




"Octavio Hernandez" wrote in message
news:

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.





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida