MDIForm schließen und MDIChilds

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Frank G..

    MDIForm schließen und MDIChilds

    Hallo,

    ich habe einen MDI-Container (MdiPatent), welcher mehrere andere Forms (MdiChild) enthält. Wenn ein MdiChild geschlossen werden soll, wird das im FromClosing-Event abgefangen und der Benutzer gefragt, ob dieses Fenster wirklich geschlossen werden soll. Im MDI-Container wird ebenfalls im FormClosing-Event nachgefragt, ob die ganze Anwendung geschlossen werden soll. Einzeln betrachtet funktioniert das auch. Nur "in Kombination" macht das m.M. nicht wirklich Sinn:
    1. Der Benutzer klickt auf das [X] im MDI-Container.
    2. Jetzt werden nacheinander alle FormClosing-Events der MdiChilds ausgelöst und jedes MdiChild fragt brav, ob es denn auch wirklich geschlossen werden soll. -> Ja!
    3. Als letztes wird nun endlich auch noch das FormClosing-Event des MDI-Containers ausgelöst, der auch nochmal fragt, ob die Anwendung wirklich geschlossen werden soll.
    Wenn der Benutzer jetzt "Nein" anklickt, bleiben der MDI-Container und auch alle MdiChild offen, selbst wenn vorher für jedes Child das Schließen bestätigt wurde. :/
    Wenn der Benutzer auf "Ja" klickt, aber vorher mal bei einem der MdiChild auf "Nein", wird die Anwendung nicht geschlossen (Wieso fragt der MdiParent dann überhaupt noch, wenn ihn die Antwort eh nicht interessiert? :huh: )

    Wie gesagt, aus meiner Sicht, macht das so nicht wirklich viel Sinn. Was ich stattdessen gerne hätte, wäre folgendes:
    • Schließt der Benutzer ein MdiChild, fragt das Child nach, ob es wirlich geschlossen werden soll (was ja im Prinzip ja auch schon funktioniert).
    • Schließt der Benutzer den MdiParent, soll einmal die Frage vom Parent kommen, ob die Anwendung geschlossen werden soll. Bei "Nein" tut sich nichts, bei "Ja" wird alles geschlossen.
    Das würde ja auch sehr einfach lösbar sein, wenn das FormClosing des Parents vor den FormClosing der Childs aufgerufen werden würde (dann könnte man einfach eine globale Variable setzen, dass die Anwendung gerade geschlossen wird, was bei den Child die eigene Abfrage unterdrückt).

    Gibt es dafür eine Lösung?

    Danke und schöne Grüße,
    Frank
    @Frank G. Frag einfach mal im MDI-Child-FormClosing-Event die Property CloseReason ab:

    VB.NET-Quellcode

    1. MessageBox.Show(e.CloseReason.ToString())
    Da gibt es ein UserClosing, wenn das MDI-Fenster selbst geschlossen werden soll
    und es gibt ein MdiFormClosing, wenn das MDI-Parent direkt geschlossen wird.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!