17 octubre 2006

Pasar valores entre formularios windows

Este post viene a cuento de una pregunta que me hicieron esta mañana, aun cuando la contesté, pensé que quizás fuera bueno incluirlo en el blog.
Mostraré dos ejemplos, en el primero simplemente un formulario (Origen) pasará dos valores a otro (Destino). En el segundo ejemplo iremos un poco más allá, el primer formulario (OrigenDialog) le pasará a un segundo (DestinoDialog) dos valores, pero este último le devolverá a su vez al primero estos dos valores, se hayan modificado o no, siempre que se pulse en el botón Aceptar.

En .Net hay varias formas de pasar valores entre formularios, mostraré la que según la documentación de Visual Studio 2005 Professional Edition es la más correcta y consume menos recursos.

- Ejemplo 1.
Como ya comenté, en este ejemplo un formulario le pasa dos valores a otro y se terminó.

En el formulario Origen incluiremos dos textbox cuyo contenido será lo que pasemos al form Destino y un botón para abrirlo.
En el formulario Destino, nos crearemos un procedimiento que será el encargado de recoger los valores.
En el evento click de dicho botón crearemos una variable de trabajo apuntando al form Destino y antes de abrirlo, le pasaremos dos parámentos al procedimiento creado para recoger los valores. Y ya está, esto es todo.

Aquí van las imágenes.
Código Form Origen:



Código Form Destino:

Resultado final:




- Ejemplo 2.
Para este ejemplo utilizaremos el método ShowDialog de la clase Form. Esto nos asegura que el primer formulario no se cierra sin haber cerrado previamente el segundo.
En el evento Click del botón del formuario OrigenDialog haremos lo siguiente:
1. Declararemos una variable para crear el segundo formulario.
2. Le pasaremos los valores al segundo formulario utilizando el mismo procedimiento que el primer ejemplo.
3. Declararemos una variable para saber si en el segundo formulario se ha pulsado el botón Aceptar o el Cancelar.
4. Si se pulsa Aceptar en el segundo formualario actualizaremos los textbox del primero con lo tecleado en el segundo.
5. Destruiremos el segundo formulario.




Formulario Destino.
A tener en cuenta de este formulario es que tenemos que asignar la propiedad DialogResult a los botones de Aceptar y Cancelar, asignándole al primero el valor OK y al segundo Cancel. Como se habrá entendido esta propiedad nos dirá si el usuario a aceptado o no los cambios realizados en este formulario.
El código de este segundo formulario es exactamente igual que el del primer ejemplo, solo tendremos el procedimiento de recolectar los valores pasados.
Imágenes:
Código OrigenDialog:

Código DestinoDialog:




Resultado final:



Espero no haberme liado, ya saben si hay dudas escribid en comentarios.

2 comentarios:

Anónimo dijo...

Hola, queria hacerte una consulta, tengo un formulario hijo que llama a otro formulario no hijo,éste(formulario no hijo)debe q pasar un valor al anterior. Ojala me puedas ayudar. Trabajando con VB 2005

Felipe Santana dijo...

Oye, de entrada comentarte que he leido tu comentario de suerte, este blog ya no lo uso, ahora lo tengo en http://netcodigo.webinfo.es. Y ahora veamos si te entiendo, lo que me dices, si te he entido es que el segundo formulario debe enviar un valor al anterior, primero ¿cuando?, en cualquier caso debes asegurarte que el primero está abierto, y si es así simplemente en el evento del formulario2 en el que quieras pasar el valo, pones form1.valor = form2.valor.
No se si te he entido bien.