Programm(MDI) beendet nicht...



  • @Sunday
    Ja, die werden automatisch geschlossen..

    @aaaabyx
    Warum machst du dir das sow schwer???
    Wenn du das Parent-MDI-Form (Vater) schließt, schliessen die Child sich auch.
    Du mußt halt (wie Sunday sagte) im OnCloseQuery die abfrage machen "Ist die Datei nicht gespeichert, Benutzer fragen ob er speichern will." Und das wars.

    So wie du das machst, ist das eher mehr Code produzieren, als nötig.
    Ich hab damit schonmal gearbeitet. Das war so ein Editor alla UltraEdit,Phase 5 etc.. Kannst mich ja wenn du willst anmailen.. 🙂

    [ Dieser Beitrag wurde am 16.06.2003 um 16:27 Uhr von DJ BlackEagle editiert. ]



  • Toll dann wird die Anwendung aber trotzdem beendet, obwohl irgendwo in einer MessageBox jemand auf ABBRECHEN geklickt hat...



  • das beenden der anwendung hat doch mit dem klicken in einer messagebox nix zu tun! vielleicht solltest du mal sagen, was für eine art programm du überhaupt schreibst? wenn du OnCloseQuery in nem Child abfängst und dort die boolsche Variable CanClose auf false setzt, wird das fenster nicht geschlossen und damit auch die anwendung nicht!



  • Hi aaaabx,

    Was macht denn Dein AlleSchliessenClick() genau ????



  • @Sunday:hast recht, hatte noch nicht so viel erfahrung damit... mal gucken obs funktioniert...



  • Okay, die Lösung ist besser, aber jetzt habe ich zwei neue Probleme, eins von der selben sorte wie das obige...
    Also ich hab das ganze jetzt im OnCloseQuery drin, und die Methode AlleSchliessen ist jetzt so:

    //So lange noch Children vorhanden sind oder nicht abgebrochen
       while(MDIChildCount!=0&&Tag==0)
          //Aktives Fenster schließen
        ActiveMDIChild->Close();
       Tag=0;
    

    Nun habe ihc aber folgende 2 Probleme:
    1. Wenn das Child-Fenster erfolgreich geschlossen wurde, kommt leider noch eine Abfrage, obwohl es gar kein Child-Fenster mehr Gibt!!! 😮 😮 😮
    Wieder fast dass gleiche wie oben...
    und außerdem 2. wird bei einem klick auf AlleSchliessen erst beim 2. Mal die Schleife betreten, obwohl der Tag der Form schon vorher 0 ist... 😮 😮 Mann kann programmieren nervig sein!



  • hmm
    🙂 Du machst es dir wirklich schwer. 🙂

    void MDIChildForm::OnCloseQuery(xxxx)
    {
      if(Ist datei gespeichert == true)
      {
        CanClose = xxxx; // Weiß jetzt nicht wie das hieß... Darf schließen
      }
      else
      {
        int result = 0;
        result = MEssageBox(Speichern,Verwerfen,abbrechen);
        if(result == Speichern)
        {
          SaveDialog;
          CanClose = xxxx; // Weiß jetzt nicht wie das hieß... Darf schließen
        }
        else if(result == Verwerfen)
        {
          CanClose = xxxx; // Weiß jetzt nicht wie das hieß... Darf schließen
        }
        else if(result == Abbrechen)
        {
          CanClose = xxxx; // Weiß jetzt nicht wie das hieß... Darf NICHT schließen
        }
      }
    }
    

    Das ist nur ein Grob beispiel...

    Wenn result Abrechen ist, wird die Anwendung NICHT geschlossen, weil "logischerweise" ein Child sich nicht schließen läßt...

    Damit wäre normalerweise deine Probleme behoben...



  • Hab ich ja schon so gemacht, die Probleme haben aber nix damit zu tun und treten trotzdem auf...

    P.S.:

    bool &CanClose;
    


  • Original erstellt von aaaabyx:
    **```cpp
    //So lange noch Children vorhanden sind oder nicht abgebrochen
    while(MDIChildCount!=0&&Tag==0)
    //Aktives Fenster schließen
    ActiveMDIChild->Close();
    Tag=0;

    Einfach:

    Close();

    und der Code von oben!!



  • [...], und die Methode AlleSchliessen ist jetzt so:[...Code...]

    Lesen tut auch ganz gut... 😉
    AlleSchliessen soll ja nur die Fenster schließen, nicht aber das Hauptfenster...

    Aber darum geht es doch jetzt gar nicht... Wieso macht das Programm zum Teufel solche FEHLER??? 😡



  • wofür verwendest du denn Tag? was steht da wann drin und wo wird es gesetzt?

    du musst uns schon darin einweihen, sonst kann dir auch keiner helfen!

    p.s. das programm macht nur das was DU ihm gesagt hast, nicht mehr und nicht weniger!!!



  • Original erstellt von aaaabyx:
    **Lesen tut auch ganz gut... 😉
    AlleSchliessen soll ja nur die Fenster schließen, nicht aber das Hauptfenster...

    Aber darum geht es doch jetzt gar nicht... Wieso macht das Programm zum Teufel solche FEHLER??? 😡**

    Hä? Jetzt versteh ich nix mehr. Ich habe den ganzen Thread nochmal gelesen. Im ersten Post von dir sagst du PRogramm beenden und nun redest du das Programm soll sich nicht schließen, aber nur die Child´s!!!
    Was denn nun?? 🙂



  • Hmmmmmm, Tag hatte dem Beenden-Prozedur gesagt, ob das Schließen der Fenster abgebrochen wurde oder nicht... Ist jetzt aber sowieso egal, weil mir irgend ne dumme Anwendung den PC zerschossn hat und das Programm weg iss...


Anmelden zum Antworten