2010-05-25 11 views

Répondre

31

Gérez l'événement FormClosed. Pour ce faire, accédez à l'onglet Événements dans la fenêtre Propriétés et double-cliquez sur l'événement FormClosed pour ajouter un gestionnaire pour cela.

Vous pouvez ensuite placer votre code dans le gestionnaire MyForm_FormClosed généré.

Vous pouvez également le faire en remplaçant la méthode OnFormClosed; Pour ce faire, tapez override onformcl dans la fenêtre de code et OnFormClosed dans IntelliSense.

Si vous souhaitez empêcher la fermeture du formulaire, gérez plutôt l'événement FormClosing et définissez e.Cancel sur true.

+0

il n'y a aucun événement "fermé", seulement "FormClosed" - tout à fait unintuitive –

+2

@hello_earth: Il y avait un événement 'Closed' dans .Net 1; il a été remplacé dans .Net 2.0 en raison de divers problèmes. L'événement 'Closed' d'origine est toujours là pour la compatibilité, mais est caché. – SLaks

3

Ajoutez un gestionnaire d'événements à l'événement FormClosed pour votre formulaire.

public class Form1 
{ 

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

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

Cet événement est obsolète – Ian

+0

@Ian - Correction d'un problème. –

8

WinForms a deux événements que vous pouvez vouloir regarder.

Le premier, l'événement FormClosing, se produit avant la fermeture du formulaire. Dans ce cas, vous pouvez toujours accéder à tous les contrôles et variables de la classe du formulaire. Vous pouvez également annuler la fermeture du formulaire en définissant e.Cancel = true; (où e est un System.Windows.Forms.FormClosingEventArgs envoyé en tant que deuxième argument à FormClosing).

La seconde, l'événement FormClosed, se produit après la fermeture du formulaire. À ce stade, vous ne pouvez pas accéder aux contrôles que le formulaire avait, bien que vous puissiez toujours effectuer le nettoyage sur les variables (telles que la fermeture des ressources gérées).

+2

Mis à jour pour utiliser 'FormClosing' et' FormClosed' comme 'Closing' et' Closed' sont obsolètes. – Powerlord

+1

Plus 2 pour dire exactement ce que vous avez mis à jour et à. – AidanO

+0

Est-ce définitivement "toutes les variables" ainsi que les contrôles sur le formulaire?J'ai essayé tout à l'heure et j'ai référencé 2 champs de la classe Form que j'ai (hérité de Form) et ils pourraient être bien accessibles - dans l'événement 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

Ou autre variante consiste à remplacer les méthodes OnFormClosed() ou OnFormClosing() à partir de System.Windows.Forms.Form. Si vous devez utiliser cette méthode, cela dépend du contexte du problème et est plus utilisable lorsque le formulaire sera sous-classé plusieurs fois et que tous doivent exécuter le même code.

Les événements sont plus utiles pour une ou deux instances si vous faites la même chose.

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

** Et appelez 'base.OnFormClosing (e)'. ** – SLaks

+1

Je le ferais naturellement et je l'ai considéré comme faisant partie du // commentaire de code. Mais en effet vous avez raison, probablement devrait être là pour les moins expérimentés. Merci SLaks. – Ian

-3

Syntaxe:

form_name.ActiveForm.Close(); 

Exemple:

{ 
     Form1.ActiveForm.close(); 
    } 
Questions connexes