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.
Cuando ya tengamos los 2 formulario lo que aremos es que al botón del formulario 2 le pondremos la propiedad DialogResul en OK
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.
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.
18 Comentarios
entendi todo pero tengo una pregunta:
ResponderEliminarcual es la funcion de dialog result??
Esa propiedad nos sirve para recuperar el valor del formulario 2 o hijo ya que este se muestra como formulario de dialogo.
EliminarForm.DialogResult (Propiedad)
Hola, tengo una duda:
ResponderEliminarSi 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.
No entendi. Estas usando formularios mdi.
EliminarExcelente, este ejemplo me ayudó muchísimo. Gracias.
ResponderEliminarQue bueno que te allá servido.
EliminarSaludos...
gracias amigo me salvaste de una larga noche ......
ResponderEliminarMe alegro que te ayudara en algo.
EliminarSaludos.
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
ResponderEliminarhttp://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/67eb9fcc-298e-47c9-86d1-1b160cbeeedb/#9d605abc-4888-42d5-bf1f-d159fa9c1871
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.
EliminarOtra 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 .
Ok, me parece lógico, intentaré gracias. Saludos.
ResponderEliminarGracias, funciona bien :)
ResponderEliminarhola 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
ResponderEliminarHola.
ResponderEliminarLamento no poder ayudarte pero no programo en visual c++.
Saludos.
Gracias ;)
ResponderEliminarDe nada.
ResponderEliminarSaludos.
Muchas gracias.. me ha servido bastante... ya tenia mas de una hora probando otros metodos... y este funciono a las mil maravillas... saludos..
ResponderEliminarHola.
ResponderEliminarMe alegro que te sirviera.
Saludos.