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 :)
GFU-Schulungen  [Anzeige]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

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!