Entwickler-Ecke

WinForms - Verwirrung bezgl. Beenden einer Anwendung


Cyron - Do 03.08.06 21:20
Titel: Verwirrung bezgl. Beenden einer Anwendung
Hallo,
gerade hat mich mein RSS-Reader über ein neues Snippet informiert:
http://www.dotnet-snippets.de/dns/Snippet_detail.aspx?=182

Muß das so sein?
Ich hab's bislang immer so gemacht:


C#-Quelltext
1:
2:
3:
4:
5:
private void ExitButton_Click(object sender, EventArgs e)
      {
         Dispose();
         Application.Exit();
      }

Ist das falsch?


Kha - Fr 04.08.06 10:11

Was hat der eine Code mit dem anderen zu tun :gruebel: ?
Der Snippet-Code zeigt einen Sicherheitsdialog an, um das Schließen eines Fensters vom User bestätigen zu lassen, und dein Code schließt alle Fenster und schlussendlich die Anwendung; das sind doch zwei Paar Schuhe.
Dein Code mit Application.Exit() ist soweit richtig[meta]Jedenfalls unter .Net 2.0, siehe SDK[/meta], den Dispose()-Aufruf solltest du aber entfernen. Ob du nun deinen Fenstern noch diese Sicherheitsabfrage hinzufügst, ist deine Entscheidung und hängt vom Typ der Anwendung ab.


Cyron - Fr 04.08.06 12:36

Achso, jetzt sehe ich das. Der Author hat den Button "Form1_FormClosing" genannt.
Warum sollte ich Dispose() rausnehmen?


Christian S. - Fr 04.08.06 19:56

user profile iconCyron hat folgendes geschrieben:
Achso, jetzt sehe ich das. Der Author hat den Button "Form1_FormClosing" genannt.
Da ist kein Button, das ist das FormClosing-Event der Form, wie diese Zeile des verlinkten Codes zeigt:

C#-Quelltext
1:
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);                    


Cyron - Fr 04.08.06 21:57

Muß man diesen Eventhandler selber schreiben oder bietet der Forms-Designer so etwas? Wenn ja, wie? :oops:


Cyron - Fr 04.08.06 22:04

Hat sich erledigt, danke :)


Kha - Sa 05.08.06 11:16

user profile iconCyron hat folgendes geschrieben:
Warum sollte ich Dispose() rausnehmen?
Wenn Application.Exit() erfolgreich ist, werden alle Forms automatisch freigegeben, darum musst du dich also nicht kümmern. Sollte nun aber Exit() (oder Close()) durch einen Eventhandler wie im Snippet-Code aufgehalten werden, sodass die Anwendung normal weiterläuft, hast du ein Problem, da du das Fenster ja schon zerstört hast.


Cyron - Sa 05.08.06 12:54

Alles klar, danke. :)