Feedback

C# - Form Hide statt Close

Veröffentlicht von am 08.10.2013
(1 Bewertungen)
Besonmders wenn man mit mehreren, nicht modalen, Fenstern (Formen) arbeitet, möchte man ein Fenster vielleicht nur verstecken sodass es einfach ohne neu-instanzierung wieder aufgerufen werden kann.

Einfach in FormClosing das e.Cancel-Flag auf true stellen und Hide() aufrufen sorgt leider dafür, das die Form garnicht mehr ordentlich geschlossen wird.

Durch eine kleine if-Abfrage kann man das Problem aber ganz schnell lösen.

Hinweis
Wenn im Quellcode Close() aufgerufen wird, zählt das wie ein benutzerausdefinierter Schließbefehl.
Als Alternative kann man nun entweder das Event vor dem schließen deabonnieren:
this.FormClosing -= Form1_FormClosing;
Close();

Oder man benutzt Befehle wie Application.Exit(). Das beendet dann aber die ganze Anwendung.
Danke an dariusarnold für den Hinweis :)
Snippet in VB übersetzen
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
	if (e.CloseReason == CloseReason.UserClosing)//Nur nicht schließen, wenn der Befehl vom Benutzer kommt
	{
		e.Cancel = true;
		this.Hide();
	}
}
Abgelegt unter Closing, Cancel, User, GUI, Form, Close.

2 Kommentare zum Snippet

dariusarnold schrieb am 05.02.2014:
Gutes Snippet.
Vielleicht solltest du noch schreiben, dass das ganze dann nur mit Application.Exit(); funktioniert, da Close(); als UserClosing gewertet wird.
Koopakiller schrieb am 05.02.2014:
@dariusarnold
Danke für den Hinweis. Ich habe es entsprechend oben ergänzt.
Des weiteren habe ich einen weiteren Weg vorgeschlagen, bei dem man das Event deabonniert.
 

Logge dich ein, um hier zu kommentieren!