En ocasiones es necesario acceder a los controles de un formulario desde otro formulario distinto. Por ejemplo, puede darse el caso de dos formularios, "padre e hijo", y que necesitemos escribir un mensaje en un TexBox del formulario "padre" cuando se realiza una determinada acción (evento) desde el formulario "hijo".
En primer lugar debemos crear una instancia del formulario al que queremos acceder. Esta instancia será creada en el lugar que queremos tener el acceso.
Form1 formularioPadre = new Form1();
Luego debes acceder al control deseado por medio de la colección Controls del objeto creado, por ejemplo:
((TextBox)formularioPadre.Controls["nombreDelControl"]).Text = “Texto en un TextBox de otro formulario”;
Como se puede obserbar, es necesaria una conversión (catch) del valor devuelto por la colección Controls al tipo de control adecuado.
La colección Controls esta “indexada”, esto quiere decir que sí lo prefieres puedes acceder a sus elementos por medio de un índice de tipo int (Int32), en lugar de utilizar el nombre del control. Esto es muy apropiado cuando quieres acceder a todos los elementos (controles) en un bucle for() o en una colección propia que guarde objetos de tipo Control.
Es un "truco" muy sencillo pero espero os sirva a más de uno.
Nota: Para ayudar a un compañero de los foros MSDN he decidido dejar para descarga un pequeño ejemplo de esta técnica. Se trata tan solo de un ejemplo, de como acceder a las propiedades y métodos de los controles que están situados en otro formulario. Digo esto porque se ha simplificado al máximo, dejando de lado algunas comprobaciones, y resaltando lo que de verdad importa en este caso.
AccesoControlesForm.zip (44,22 kb)
Solo espero que ahora quede más claro este asunto. Para cualquier problema...aquí estamos