2011-05-30 19 views
7

Cómo detectar cuándo se cierra el formulario de propietario (desde un control dentro de él)?¿Cómo detectar cuando el formulario de propietario se cierra desde un control interno?

UPD necesito el control de saber que su forma se está cerrando, no al revés

+0

¿verificó el acto de clausura en el formulario? – MBen

+0

agregue el evento al formulario hijo y levántelo cuando el formulario primario cierre – Reniuz

+0

Su pregunta es un poco confusa para mí. ¿Desea a) la forma de saber que se está cerrando debido a alguna acción tomada dentro de un control, o b) el control para saber que el formulario se está cerrando? –

Respuesta

13

Créditos a Fredrik Mörk para esta solución:

FindForm().FormClosing += parentForm_FormClosing; 
+4

Puede usar el método [Control.FindForm] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.findform.aspx) en lugar de un bucle. –

+0

@Fredrik Mörk - wow, no sabía acerca de este método, actualicé la respuesta. Eliminaré mi respuesta si creas la tuya. Sería justo, creo. –

+0

Ese método no es tan fácil de encontrar, ya que es bastante mal nombrado (en mi opinión, al menos). En cuanto a la respuesta, solo déjalo quedarse. Es un esfuerzo de la comunidad, ¿verdad? :-) –

3

Usted debe interceptar FormClosing evento. En FormClosingEventArgs, la variable CloseReason le mostrará por qué se cierra el formulario. Su mejor apuesta es interceptar cuando esta variable es igual a UserClosing valor enumerado.

+1

No hay FormClosing _inside the control_ – user626528

+1

@ user626528: no, pero el control aún puede asociar un controlador de eventos al evento 'FormClosing' del formulario principal. –

+0

Con la nueva actualización de OP, creo que la respuesta de Fredrik Mörk y Alex Aza es más completa. –

0

El cierre dueño de la forma es cuando una forma se cierra por otra forma parental que puede cerrar el formulario o se cierra el formulario cuando el formulario principal está cerrada.

utilizar el evento cierre de formulario para comprobar si hay otra forma de cerrar el formulario:

private void AppMainForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if(e.CloseReason == CloseReason.FormOwnerClosing) 
    { 
     // do something 
    } 
    else 
    { 
     // do nothing 
    } 
} 
Cuestiones relacionadas