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!
-
-
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.