2010-05-25 46 views

Respuesta

31

Maneje el evento FormClosed.

Para hacerlo, vaya a la pestaña Eventos en la ventana Propiedades y haga doble clic en el evento FormClosed para agregarle un controlador.

Luego puede poner su código en el controlador generado MyForm_FormClosed.

También puede hacerlo anulando el método OnFormClosed; para hacerlo, escriba override onformcl en la ventana de código y OnFormClosed de IntelliSense.

Si desea evitar que el formulario se cierre, maneje el evento FormClosing en su lugar y establezca e.Cancel en .

+0

no hay ningún evento "cerrado", sólo "FormClosed" - muy poco intuitivo –

+2

@hello_earth: Hubo un evento 'Closed' en .Net 1; fue reemplazado en .Net 2.0 debido a varios problemas. El evento 'Closed' original todavía está ahí para compatibilidad, pero está oculto. – SLaks

3

Agregue un controlador de eventos al evento FormClosed para su formulario.

public class Form1 
{ 

    public Form1() 
    {  
     this.FormClosed += MyClosedHandler; 
    } 

    protected void MyClosedHandler(object sender, EventArgs e) 
    { 
     // Handle the Event here. 
    } 
} 
+0

Ese evento está en desuso – Ian

+0

@Ian - Se ha solucionado. –

8

WinForms tiene dos eventos que es posible que desee ver.

El primero, el evento FormClosing, ocurre antes de que el formulario se cierre realmente. En este caso, puede acceder a todos los controles y variables en la clase del formulario. También puede cancelar el formulario close configurando e.Cancel = true; (donde e es un System.Windows.Forms.FormClosingEventArgs enviado como segundo argumento al FormClosing).

El segundo, el evento FormClosed, ocurre después de que se cierra el formulario. En este momento, no puede acceder a ningún control que tenga el formulario, aunque puede hacer una limpieza en variables (como el cierre de recursos administrados).

+2

Se ha actualizado esto para utilizar 'FormClosing' y' FormClosed' como 'Closing' y' Closed' están en desuso. – Powerlord

+1

Plus 2 para informar de forma efectiva de qué lo actualizó. – AidanO

+0

¿Definitivamente son "todas las variables", así como los controles en el formulario?Intenté hace un momento y mencioné dos campos de la clase de Formulario I (heredados de Formulario) y se podía acceder a ellos correctamente: en el evento FormClosed – PandaWood

2
public FormName() 
{ 
     InitializeComponent(); 
     this.FormClosed += FormName_FormClosed; 
} 

private void FormName_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e) 
{ 
   //close logic here 
} 
15

O Otra alternativa es reemplazar los métodos OnFormClosed() o OnFormClosing() de System.Windows.Forms.Form.

Si se debe utilizar este método depende del contexto del problema, y ​​es más útil cuando el formulario se subclasificará varias veces y todos deben realizar el mismo código.

Los eventos son más útiles para una o dos instancias si está haciendo lo mismo.

public class FormClass : Form 
{ 
    protected override void OnFormClosing(FormClosingEventArgs e) 
    { 
     base.OnFormClosing(e); 
     // Code 
    } 
} 
+7

** Y llame a 'base.OnFormClosing (e)'. ** – SLaks

+1

Lo haría naturalmente y lo consideré parte del // comentario de código. Pero de hecho estás en lo cierto, probablemente debería estar ahí para los menos experimentados. Gracias SLaks. – Ian

-3

Sintaxis:

form_name.ActiveForm.Close(); 

Ejemplo:

{ 
     Form1.ActiveForm.close(); 
    } 
Cuestiones relacionadas