Form in Windows Forms schließen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet
this.Close();

Das schließt exakt die Form, auf die sich this bezieht.

Falls das allerdings die "Haupt-Form" sein sollte, wird die Anwendung beendet und das führt zum Schließen aller Forms.

1TheCrazy 
Fragesteller
 29.10.2021, 23:12

Und wie kann ich nur eine Form schließen, selbst wenn es die Hauptform ist, oder muss ich eine andere Form zur Hauptform machen?

0
Zahhak  29.10.2021, 23:22
@1TheCrazy

Da gäbe es einige Möglichkeiten.

Eine der am schnellsten umzusetzenden wäre die, erst gar keine "Haupt-Form" zu verwenden.

Im Grunde so:

1. Rufe Application.Run() ohne Parameter auf, aber vergiss nicht anderweitig eine Form anzuzeigen.

2. Lege eine statische Klasse als Verwaltungsinstanz an. Im einfachsten Fall enthält diese einfach nur eine Liste und zwei Methoden, je eine zum Hinzufügen und Entfernen einer Form.

3. Füge jeder Form in deinem Projekt Overrides für Show() und Close() hinzu, die neben der base-Funktionalität die Form zur Verwaltungsinstanz hinzufügen bzw. aus dieser entfernen.

4. In der Entfernen-Methode deiner Verwaltungsinstanz überprüfe nach dem Entfernen einer Form, ob die Liste leer ist. Falls ja, führe Application.Exit() aus.

0
ohwehohach  29.10.2021, 23:22
@1TheCrazy

Nein. Die Hauptform ist immer die, die in Application.Run angegeben wurde. Du kannst Dir aber mit einem Trick behelfen: Verberge das Formular anstatt es zu schließen und zeige stattdessen das andere an. Wird dieses geschlossen, schließe auch das Hauptformular.

Mein übliches Verfahren ist, das zweite Formular zu erstellen und den OnClosing-Event dieses Formulars im Hauptformular so zu implementieren, dass dort auch this.Close() gemacht wird.

Dann zeigst Du das zweite Formular mit form2.Show() an und verbirgst das Hauptformular mit this.Hide()

0
1TheCrazy 
Fragesteller
 29.10.2021, 23:51
@ohwehohach

Könntest du mal ein Stück Code hochladen, um mir zu zeigen wie es geht? Und bist du dir sicher dass man die Hauptform nicht ändern kann?

0
1TheCrazy 
Fragesteller
 29.10.2021, 23:54
@Zahhak

Ist bestimmt hilfreich, doch ich habe leider kein Wort verstanden und es scheitert schon beim ersten Schritt, denn ich kann Application.Run(); im code nicht ausführen. Vllt könntest du mir noch etwass genauer schreiben wie ich das machen soll. Danke

0
Zahhak  30.10.2021, 00:25
@1TheCrazy

Application.Run() wird in der Main-Methode deines Projektes aufgerufen.

0
ohwehohach  30.10.2021, 10:57
@1TheCrazy
Und bist du dir sicher dass man die Hauptform nicht ändern kann?

Ja.

Könntest du mal ein Stück Code hochladen, um mir zu zeigen wie es geht?

Beispielsweise so (aus dem Kopf geschrieben, kann sein, dass Du es noch ein wenig anpassen musst):

private void ShowOtherForm()
{
   Form2 frm = new Form2();
   frm2.Closing += this.Form2Closing();
   frm2.Show();
   this.Hide();
}

private void Form2Closing(Object sender, FormClosingEventArgs e)
{
   this.Close();
}
0