2010-05-25 22 views

risposta

31

Gestire l'evento FormClosed.

Per fare ciò, andare alla scheda Eventi nella finestra Proprietà e fare doppio clic sull'evento FormClosed per aggiungere un gestore per esso.

È quindi possibile inserire il codice nel gestore MyForm_FormClosed generato.

È inoltre possibile ignorare il metodo OnFormClosed; per farlo, digitare override onformcl nella finestra del codice e OnFormClosed da IntelliSense.

Se si desidera impedire la chiusura del modulo, gestire invece l'evento FormClosing e impostare e.Cancel su true.

+0

non c'è nessun caso "Chiuso", solo "FormClosed" - molto poco intuitivo –

+2

@hello_earth: C'è stato un evento 'Closed' in .Net 1; è stato sostituito in. Net 2.0 a causa di vari problemi. L'evento 'Closed' originale è ancora lì per compatibilità, ma è nascosto. – SLaks

3

Aggiungere un gestore eventi all'evento FormClosed per il proprio modulo.

public class Form1 
{ 

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

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

Evento obsoleto – Ian

+0

@Ian - Risolto. –

8

WinForms ha due eventi che potresti voler guardare.

Il primo, l'evento FormClosing, si verifica prima che il modulo sia effettivamente chiuso. In questo caso, puoi ancora accedere a qualsiasi controllo e variabile nella classe del modulo. È inoltre possibile annullare la chiusura del modulo impostando e.Cancel = true; (dove e è un System.Windows.Forms.FormClosingEventArgs inviato come secondo argomento a FormClosing).

Il secondo, l'evento FormClosed, si verifica dopo la chiusura del modulo. A questo punto, non è possibile accedere a tutti i controlli presenti nel modulo, sebbene sia ancora possibile eseguire la pulizia delle variabili (come la chiusura delle risorse gestite).

+2

Aggiornato per usare 'FormClosing' e' FormClosed' come 'Closing' e' Closed' sono deprecati. – Powerlord

+1

Plus 2 per sapere acutalmente cosa lo hai aggiornato da e verso. – AidanO

+0

È sicuramente "tutte le variabili" e anche i controlli sul modulo?Ho provato proprio ora e ho fatto riferimento a 2 campi della classe Form che ho (ereditato da Form) e si potrebbe accedere bene - nell'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 un'altra alternativa è quella di sostituire i metodi OnFormClosed() o OnFormClosing() da System.Windows.Forms.Form.

Se è necessario utilizzare questo metodo dipende dal contesto del problema ed è più utilizzabile quando il modulo verrà sottoposto a sottoclassi diverse volte e tutti dovranno eseguire lo stesso codice.

Gli eventi sono più utili per una o due istanze se si sta facendo la stessa cosa.

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

** E chiamare 'base.OnFormClosing (e)'. ** – SLaks

+1

Lo farei naturalmente e lo considererei parte del // commento del codice. Ma in effetti hai ragione, probabilmente dovresti essere lì per i meno esperti. Grazie SLaks. – Ian

-3

Sintassi:

form_name.ActiveForm.Close(); 

Esempio:

{ 
     Form1.ActiveForm.close(); 
    }