Feedback

Form Hide statt Close

Sprache: C#

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. [b]Hinweis[/b] 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: [code]this.FormClosing -= Form1_FormClosing; Close();[/code] Oder man benutzt Befehle wie Application.Exit(). Das beendet dann aber die ganze Anwendung. Danke an dariusarnold für den Hinweis 🙂
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();
	}
}
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();
	}
}

2 Kommentare

  1. Gutes Snippet.
    Vielleicht solltest du noch schreiben, dass das ganze dann nur mit Application.Exit(); funktioniert, da Close(); als UserClosing gewertet wird.