Pasar Datos de Formulario Hijo a Padre C#

domingo, 27 de mayo de 2012

Hola a todos ahora les traigo un ejemplo que puede ser útil para muchos, a veces es necesario pasar información entre formularios la mayoría de veces se pasan datos del formulario padre al hijo, pero a veces tambien es necesario pasar datos del formulario hijo al padre y eso es lo que veremos ahora.

La forma que les mostrare quizás es la forma mas sencilla de hacerlo y consiste en mostrar el formulario hijo como un formulario de dialogo.

Para empezar creemos 2 formularios con un textbox y un botón el form1 sera el padre y el form2 sera el hijo.

diseño

Cuando ya tengamos los 2 formulario lo que aremos es que al botón del formulario 2 le pondremos la propiedad DialogResul en OK

boton

Ahora si a programar empezaremos por el formulario 2(hijo) pondremos el siguiente código.
public string varf2; //variable para pasar informacion

private void button1_Click(object sender, EventArgs e)
{
varf2 = textBox1.Text; //asignamos a la variable lo capturado en el textbox
}

Lo único que aremos aquí es declarar una variable publica a nivel de clase que sera la que utilizaremos para pasar la información como solo pasare un dato solo utilizare una variable.
Y en el evento click del botón lo único que aremos es asignar a la variable el dato capturado en el textbox.

Ahora nos vamos al formulario 1(padre) y en el evento click del botón pondremos lo siguiente.
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(); //creamos un objeto del formulario 2
DialogResult res = f2.ShowDialog(); //abrimos el formulario 2 como cuadro de dialogo modal

if (res == DialogResult.OK)
{
//recuperando la variable publica del formulario 2
textBox1.Text = f2.varf2; //asignamos al texbox el dato de la variable
}

}

Aquí lo que hacemos es mostrar el formulario 2(hijo) como un formulario de dialogo y luego recuperamos la variable del formulario 2 y se la asignamos al textbox del formulario 1.

captura

captura

Eso es todo sencillo verdad, les dejo el proyecto para que lo descarguen.

Descargar Proyecto

18 comentarios:

cachabacha dijo...

entendi todo pero tengo una pregunta:
cual es la funcion de dialog result??

Cristian Torres dijo...

Esa propiedad nos sirve para recuperar el valor del formulario 2 o hijo ya que este se muestra como formulario de dialogo.
Form.DialogResult (Propiedad)

Anónimo dijo...

Hola, tengo una duda:

Si hicieras este mismo proceso dentro de un MenuStrip como se podría hacer para que el hijo no salga fuera del formulario principal.

y gracias por el ejemplo!, nos vemos.

Cristian Torres dijo...

No entendi. Estas usando formularios mdi.

Anónimo dijo...

Excelente, este ejemplo me ayudó muchísimo. Gracias.

Cristian Torres dijo...

Que bueno que te allá servido.

Saludos...

Anónimo dijo...

gracias amigo me salvaste de una larga noche ......

Cristian Torres dijo...

Me alegro que te ayudara en algo.

Saludos.

WilO Frias dijo...

Tengo un problema con algo parecido a éste ejemplo, espero me puedas ayudar. En mi aplicación lo que quiero hacer es que varios formularios obtengan los valores de un mismo gridview, traté de almacenar los valores del gridview con el evento celldoubleclick y almacenarlos en variables para que posteriormente dependiendo que formulario haga la consulta a ese formulario se le pasen los datos, pero no logro hacer que funcione. Que me recomiendas hacer? Te paso el link de mi publicación para que me entiendas. Saludos

http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/67eb9fcc-298e-47c9-86d1-1b160cbeeedb/#9d605abc-4888-42d5-bf1f-d159fa9c1871

Cristian Torres dijo...

Podes aplicar la técnica que te menciono Leandro en el foro usando interface para facilitar la comunicación de formularios veo que intentaste usar esa forma pero no te funciono no se si comprobaste que lo ayas hecho bien.

Otra forma que podrías utilizar una clase para guardar la información y una vez que ayas guardado solo instancias las clase y variables y podrás obtener los datos.

public class Datos
{
public static string Id;
public static string Nombre;
}

Guardas los datos del datagrid en las variables

private void dgvComponente_CellDoubleClick(...)
{
DataGridViewRow row = dataGridView1.CurrentRow;

Datos.Id = Convert.ToString(row.Cells[0].Value);
Datos.Nombre = Convert.ToString(row.Cells[1].Value);

}

Y en el formulario que quieras usar los datos solo llamarías a las variables Datos.Id Datos.Nombre .

WilO Frias dijo...

Ok, me parece lógico, intentaré gracias. Saludos.

Anónimo dijo...

Gracias, funciona bien :)

Fernanda Soto dijo...

hola oye esta genial tu programa pero no se si podrias ayudarme con esto mira yo quiero hacer algo igual pero en visual studio c++ y al tratar de adaptarlo no me reconoce la variable podrias ayudarme por favor

Cristian Torres dijo...

Hola.
Lamento no poder ayudarte pero no programo en visual c++.

Saludos.

Anónimo dijo...

Gracias ;)

Cristian Torres dijo...

De nada.
Saludos.

Prueba dijo...

Muchas gracias.. me ha servido bastante... ya tenia mas de una hora probando otros metodos... y este funciono a las mil maravillas... saludos..

Cristian Torres dijo...

Hola.
Me alegro que te sirviera.
Saludos.

Publicar un comentario en la entrada

Nota: solo los miembros de este blog pueden publicar comentarios.