App schmiert ab, wenn MDI Child freigegeben wird.



  • Ich erstelle eine MDI-CHild Form dynamisch, funktioniert auch prima. Wenn ich nun versuche diese mit ->Release wieder zu löschen, bekomme ich einen Fehler "Schreiben auf Adr. 00000". Womit hat das zu tun? Will das normale Fenster noch irgendwie auf das MDI Zugreifen ???? Was tun ?



  • zeig mal den ausschnitt wo du sie erstellst und wo du sie löschen möchtest



  • erstellen:

    if (WorkForm==NULL) { 
        WorkForm = new TForm(Form1);
        WorkForm->Parent=Form1;
        WorkForm->FormStyle = fsMDIChild;
        WorkForm->Caption="Untitled Ladder";   
       } else
         {
           //mecker
         }
    

    löschen:

    if (WorkForm!=NULL) 
       {
         WorkForm->Release;
       }
    


  • Wie kommst du auf Release?
    Sieh dir mal das Standard-MDI-Projekt an.

    void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action)
    {
      Action = caFree;
    }
    


  • Das hab ich nicht, hab halt einfach in der Hilfe gesucht 😉

    Bedankt!



  • *lol*

    @JANSEN

    es macht keinen UNterschied, immer noch der gleiche Fehler !!!!!!!!!



  • Mastrio schrieb:

    *lol*

    😕

    Mastrio schrieb:

    immer noch der gleiche Fehler !!!!!!!!!

    Dann liegt der Fehler wohl woanders!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Diese Zeile ist garantiert nicht gut:

    Mastrio schrieb:

    WorkForm = new TForm(Form1);
    

    Gruß,

    Alexander



  • Und was ist gut ?

    WorkForm = new TForm(this); ?



  • Mastrio schrieb:

    Und was ist gut ?

    WorkForm = new TForm(this); ?

    Kommt drauf an, wer für die Zerstörung des Formulars zuständig sein soll.

    Gruß,

    Alexander



  • Und wem darf ich diese AUfgabe aufbürden?

    Das hier:

    WorkForm = new TForm(Application);

    führt zum gleichen Fehler.



  • Mastrio schrieb:

    Das hier: (...) führt zum gleichen Fehler.

    Wie schon erwähnt liegt der Fehler ohnehin wohl woanders.
    Du wirst wohl nicht drum herum kommen, etwas mehr Deines Codes und/oder Deiner Programmstruktur (sofern
    vorhanden) zu verraten.

    Gruß,

    Alexander



  • hier ein Beispiel:

    Du hast eine Parent-Form (typischerweise dein Hauptformular der Anwendung) und ein Kind-Form (fertig designed). Beim Klick auf einen Knopf im Parent, wird ein neues Kind erzeugt. Im OnClose des Kindfenstern musst du die Freigabe übernehmen.

    // im Elternformular
    // -> das muss "fsMDIForm" im FormStyle haben
    void __fastcall TForm1::NewFormClick(TObject *Sender)
    {
      TFormChildWindow *Child = new TFormChildWindow(Application);
    }
    
    // im Kindformular
    void __fastcall TFormChildWindow ::FormClose(TObject *Sender, TCloseAction &Action)
    {
      Action = caFree;
    }
    


  • So, hab jetzt den Fehler gefunden, das hier muss natürlich auch noch raus:

    WorkForm->Parent=Form1;

    Dann funzt es. Alles andere hat nix damit zu tun.


Log in to reply