2011-03-26 16 views
5

Tengo un problema simple: tengo un formulario principal en win-forms/C#. Tiene un cuadro de lista vinculado a una base de datos.Accediendo al formulario principal desde el formulario

Cuando hago clic en un botón, se crea un nuevo formulario.

Cuando hago clic en un botón en el formulario secundario, quiero llamar a un método que existe en el formulario principal, que actualiza el cuadro de lista o alternativamente cuando se cierra el formulario secundario, para llamar a esa función.

¿Es esto posible?

+0

¿Está tratando de implementar un cuadro de diálogo que contenga los botones 'Guardar' y' Aplicar'? – manji

Respuesta

6

Escenario 1: Llamar a un método en el formulario principal al hacer clic en el botón en forma de niño.

Cree Event en forma de niño. Levante ese evento con un clic de botón, etc. Suscríbase a ese evento en su Formulario principal y llame al método de formulario de los padres dentro de ese.

Escenario 2: llame a un método en el formulario principal cuando el formulario secundario está cerrado.

Maneje el evento FormClosed o FormClosing de Child Form en el formulario principal y llame al método de formulario del padre dentro de eso.

ChildForm frm = new ChildForm(); 
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed); 

void frm_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     //Call your method here. 
    } 
+0

Impresionante ... Gracias –

14

Hay muchas maneras de lograr esto, pero aquí hay una manera simple. En su forma principal, al crear y mostrar un formulario secundario, hacerlo de esta manera:

ChildForm child = new ChildForm(); 
child.Show(this); // this calls the override that takes Owner parameter 

Entonces, cuando se necesita llamar a un método en el formulario principal del formulario secundario, utilice un código como este (asume su principal forma es de tipo MainForm):

MainForm parent = (MainForm)this.Owner; 
parent.CallCustomMethod(); 

una forma más compleja sería usar una forma de inyección de dependencias, donde se le pasa una referencia a la forma original (o más correctamente, a su interfaz) en el constructor de la forma infantil. Pero la forma anterior es simple y probablemente lo suficientemente efectiva para sus propósitos (y en realidad es una forma de inyección de dependencia en sí, más o menos).

+1

También puede usar 'ShowDialog (this);' - el código funcionará de la misma manera. – MusiGenesis

Cuestiones relacionadas