Programación, Tecnología y Más...

Programación, Tecnología y Más...

Pasar Datos de Formulario Hijo a Padre C#

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

Si quieren donarme para una soda lo pueden hacer aqui.


Publicar un comentario

18 Comentarios

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

    ResponderEliminar
    Respuestas
    1. 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)

      Eliminar
  2. 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.

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

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

    ResponderEliminar
  5. 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

    ResponderEliminar
    Respuestas
    1. 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 .

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

    ResponderEliminar
  7. Gracias, funciona bien :)

    ResponderEliminar
  8. 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

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

    Saludos.

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

    ResponderEliminar