Como recorrer todos los componentes de un form o un panel

En determinadas ocasiones tenemos que realizar una misma operación en todos los componentes, ya sean iguales o distintos, que están en un formulario, dentro de un panel, etc.

Lo mas fácil seria ir uno por uno haciendo el cambio deseado, si son unos pocos, no seria mucho problemas, pero cuando son muchos esto puede ser un engorro, pudiendo llevarnos a introducir errores en nuestros código.

Otra opción es ir recorriendo todos los componentes que están dentro de nuestro formulario y comprobar de que clase es, y si es del tipo que tenemos que hacer el cambio, entonces pasamos a hacérselo.

Esto lo podemos hacer de la siguiente forma:

Para saber cuantos componentes tiene nuestro formulario utilizaremos la opción «Controls».  Este tiene varios parámetros que nos indican cuantos «controles» hay en nuestro formulario, el tipo, etc. Con esta información que nos facilita «Controls» podemos recorrer todos los componentes que hay.

foreach (Control cComprobar in fFormulario.Controls)
{
    // Codigo de control para el componente
}

Este código nos permite recorrer todos los controles que tenemos situados en nuestro formulario.

Ahora tenemos que saber de que tipo es el control, para ello solo tenemos que preguntárselo.

if (cComprobar is PictureBox) 
{
     // Si es del tipo que queremos lo procesamos
}

En este caso queremos saber si es un «PictureBox», pero si queremos saber si es de otro tipo, por ejemplo, si queremos modificar un «TextBox», cambiamos el «PictureBox» por «TextBox». Y así según el tipo deseado.

Ejemplo:

foreach (Control cComponente in fFormulario.Controls)
{
    if (cComponente is PictureBox)
    {
        cComponente.Image = Image.FromFile(sNuevaImagen);
    }
}

Pero puede suceder que no a todos los componentes que tenenos en nuestro formulario queramos modificarlos. Para esto, yo me aprovecho de la opción «Tag» que tienen todos los controles. En esta opción podemos introducir  el texto que deseemos. Solo tengo que marcar todos los controles que no quiero modificar y cuando lo recorro comprobar que quiero cambiarlo.

if ((string)cComponente.Tag != "estono")
{
    // Este control si lo quiero modificar
}

y con esto ya podemos realizar cualquier cambio a nuestros controles, sin tener que repetir el código para cada unos de ellos.

Y tu, si utilizas otro método puedes compartirlo con nosotros, solo tienes que dejar un comentario.