2016-04-05 4 views
1

Verwendung von C# und WinForms, habe ich ein Grundmenü, das eine Vielzahl von Formen auf Tastenklicks ruft:Muss ich Form.Close() aufrufen, oder wird es für mich behandelt?

private void Some_Button_Click(object sender, EventArgs e) 
     { 
      var someForm = new SomeForm(); 

      someForm.MdiParent = MenuForm; 
      someForm.Show(); 
      someForm.BringToFront(); 
     } 

Meine Sorge ist, Speicher useage. Wenn ein Benutzer auf "x" klickt, um das Formular zu schließen, wird Form.Close() bereits beim Schließen des Fensters aufgerufen? Oder muss ich ein Ereignis erstellen, um explizit Form.Close() aufzurufen?

+2

Nein, tun Sie nicht. Wenn Sie die 'Form' nicht manuell über Ihren Code schließen, müssen Sie' Form.Close() 'nicht aufrufen. – EvilTak

+0

In der herkömmlichen .NET-Methode ruft die Close() - Methode einer Klasse Dispose() auf. Das gilt auch für die Form-Klasse. In manchen Fällen müssen Sie Dispose() aufrufen, wenn Sie ShowDialog() anstelle von Show() verwenden. Dies kann nicht automatisch erfolgen, da Sie die Dialogergebnisse normalerweise nach dem Aufruf von ShowDialog() erhalten würden. Und richtig gemacht mit der Anweisung * using *. Nicht der Fall hier. –

Antwort

2

Wenn ein Benutzer auf "x" klickt, um das Formular zu schließen, wird Form.Close() bereits aufgerufen, wenn das Fenster geschlossen wird?

Nein, das Ereignis FormClosing wird ausgelöst. Form.Closeerzählt das System, um das Formular zu schließen (das Ereignis FormClosing wird auch in diesem Fall ausgelöst).

Close ist Befehl. FormClosing heißt als Antwort auf ein Befehl.

+0

Gut genug für mich. Vielen Dank! – Kiel