2010-05-25 14 views

Antwort

31

Behandeln Sie das Ereignis FormClosed.

Wechseln Sie dazu auf die Registerkarte Ereignisse im Fenster Eigenschaften und doppelklicken Sie auf das Ereignis FormClosed, um einen Handler dafür hinzuzufügen.

Sie können dann Ihren Code in den generierten MyForm_FormClosed Handler setzen.

Sie können dies auch durch Überschreiben der OnFormClosed Methode; Geben Sie override onformcl in dem Codefenster und OnFormClosed von IntelliSense ein, um das zu tun.

Wenn Sie das Schließen des Formulars verhindern möchten, behandeln Sie stattdessen das Ereignis FormClosing und setzen Sie e.Cancel auf true.

+0

es kein "Closed" Ereignis ist, nur "Formclosed" - ganz unintuitive –

+2

@hello_earth: Es war eine 'Closed' Veranstaltung in .Net 1; Es wurde in .Net 2.0 aufgrund verschiedener Probleme ersetzt. Das ursprüngliche "Closed" -Ereignis ist aus Kompatibilitätsgründen noch vorhanden, aber es ist ausgeblendet. – SLaks

3

Fügen Sie dem Ereignis FormClosed für Ihr Formular einen Ereignishandler hinzu.

public class Form1 
{ 

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

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

Dieses Ereignis ist veraltet – Ian

+0

@Ian - Fixed it. –

8

WinForms hat zwei Ereignisse, die Sie sich ansehen möchten.

Das erste, das FormClosing Ereignis passiert, bevor das Formular tatsächlich geschlossen wird. In diesem Fall können Sie weiterhin auf alle Steuerelemente und Variablen in der Klasse des Formulars zugreifen. Sie können das Formular auch schließen, indem Sie e.Cancel = true; (wobei e eine System.Windows.Forms.FormClosingEventArgs als zweites Argument an FormClosing gesendet wird) festlegen.

Die zweite, die FormClosed Ereignis passiert, nachdem das Formular geschlossen ist. Zu diesem Zeitpunkt können Sie nicht auf alle Steuerelemente zugreifen, die das Formular enthielt, auch wenn Sie weiterhin für Variablen bereinigen können (z. B. Schließen verwalteter Ressourcen).

+2

Dies wurde aktualisiert, um 'FormClosing' und' FormClosed' zu verwenden, da 'Closing' und' Closed' veraltet sind. – Powerlord

+1

Plus 2, um genau zu sagen, was Sie von und zu aktualisiert haben. – AidanO

+0

Ist es definitiv "alle Variablen" sowie Kontrollen auf dem Formular?Ich habe gerade versucht und referenzierte 2 Felder der Form-Klasse, die ich habe (geerbt von Form) und sie konnten gut zugegriffen werden - in der FormClosed Ereignis – PandaWood

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

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

Oder eine andere Alternative ist, die OnFormClosed() oder OnFormClosing() Methoden von System.Windows.Forms.Form außer Kraft zu setzen.

Ob Sie diese Methode verwenden sollten, hängt vom Kontext des Problems ab und ist besser nutzbar, wenn das Formular mehrmals unterklassifiziert wird und alle denselben Code ausführen müssen.

Ereignisse sind nützlicher für ein oder zwei Instanzen, wenn Sie das gleiche tun.

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

** Und ruf 'base.OnFormClosing (e)'. ** – SLaks

+1

Ich würde das natürlich tun und es als Teil des // Code-Kommentars betrachten. Aber in der Tat hast du Recht, wahrscheinlich sollte es für die weniger Erfahrenen da sein. Danke SLaks. – Ian

-3

Syntax:

form_name.ActiveForm.Close(); 

Beispiel:

{ 
     Form1.ActiveForm.close(); 
    } 
Verwandte Themen