2010-06-25 22 views
5

Tengo una pequeña aplicación que crea alertas cada vez que se realiza un cambio en una base de datos. Tengo algunas opciones en el formulario de alerta que aparece.
Una de las opciones abre otro formulario (un formulario secundario) pidiéndole al usuario más información.¿Cerrar un formulario desde otro formulario?

Cuando el formulario secundario obtiene la información necesaria del usuario, quiero que se cierre tan bien como el formulario principal. Hasta ahora, solo sé cómo cerrar el formulario hijo, pero no el formulario principal.

Parent form > Opens child form 
Child gathers information > User clicks ok in child > child closes, parent closes 

^esto es lo que quiero

que simplemente no tienen la capacidad mental para pensar en la forma de comunicarse a través de las formas de lograr cerrar el formulario principal.

Cualquier ayuda sería muy apreciada. En realidad, sería muy apreciado. Si pudiera aprender a hacer que mis formas se comuniquen entre sí, podría causar mucho daño (en el buen sentido 8D).

Respuesta

1

probar este en el formulario principal:

using (var childForm = new ChildForm()) 
{ 
    if (childForm.ShowDialog() == DialogResult.OK) 
    { 
     Close(); 
    } 
} 

Su formulario secundario debe devolver un DialogResult haciendo clic en los botones (OK o Cancelar) y/o establecer las propiedades AcceptButton y CancelButton en el diseñador.

+0

Si el formulario secundario va a devolver mucha información al formulario principal, prefiero que la clase del formulario hijo defina un método estático que cree un formulario secundario, realice ShowDialog en él, copie la información apropiada de él en un dato de retorno objeto, destruye la forma y devuelve los datos. En tal escenario, el constructor del formulario hijo puede estar protegido o, si la clase no será heredable, privada. – supercat

+0

O paso un objeto comercial en el formulario secundario y lo dejo hacer cambios en el objeto o, más típicamente, expongo los datos como una propiedad en el formulario secundario. –

6

En la forma padre, usted puede hacer algo como esto:

ChildForm f = new ChildForm(); 
f.FormClosed += (o,e) => this.Close(); 
f.Show(); 
+0

@Justin, obtengo un delegado() no puede tomar 0 parámetros de error ... – sooprise

+0

@BFree, su solución funcionó a la perfección, muchas gracias !!! : D – sooprise

+1

Esto no le permite al usuario cancelar lo que está haciendo en el formulario secundario. –

Cuestiones relacionadas