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();
}
}
Alte URL:
/snippet/form-hide-statt-close/2772
Gutes Snippet.
Vielleicht solltest du noch schreiben, dass das ganze dann nur mit Application.Exit(); funktioniert, da Close(); als UserClosing gewertet wird.
@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.