Announcement

Collapse
No announcement yet.

Formular vollständig entfernen!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Formular vollständig entfernen!

    Ich habe ein Programm geschrieben, bei dem ich alle mdi-Formulare zur Laufzeit lade. Leider treten immer wieder Fehler auf, wenn das Programm länger getestet wird. Ich glaube, dass Formulare nicht vollständig entfernt werden und es dadurch zu Zugriffsverletzungen kommt.
    Mein Code zum Öffnen und Schließen:

    application.CreateForm(tfrm_ueben1b,frm_ueben1b);
    release;

    Vielen Dank im Voraus!

  • #2
    So schließe ich meine MDI Formen

    {Diese Prozedure schließt alle MDI-Fenster bei denen OnClose
    Action:=caFree gesetzt wird}
    procedure TForm_Main.MDIClose;
    var
    I : integer;
    begin
    for I:=0 to MDIChildCount-1 do
    begin
    MDIChildren[I].Close;
    end;
    end;

    //In den einzelnen Formen muss bei OnClose folgendes stehen
    procedure TForm_Test.FormClose(Sender: TObject;
    var Action: TCloseAction);
    begin
    Action:=caFree;
    end

    Comment


    • #3
      Hi,<br>lässt Du die Schleife wirklich so laufen?<br>Dann müsste sie eigentlich auf einen Fehler laufen, da irgendwann der Punkt erreicht ist, an dem I ein Formular adressiert, dass schon geschlossen wurde.<br>Lass sie doch Rückwärts laufen, also von MDIChildCount-1 downto 0.<br>Ciao<br>Christia

      Comment


      • #4
        Hallo,

        auf Nummer sicher geht man mit folgender Schleife:
        <pre>
        begin
        while MDIChildCount > 0 do MDIChildren[0].Close;
        end;
        </pre>

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Ja ich lasse die Schleife so laufen. Bei mir funktioniert es. Du kannst aber auch eine andere Schleife nehmen. Funktioniert es ansonsten so wie Du dir das vorgestellt hast? Wird Dein Formular richtig geschlossen

          Comment


          • #6
            Hallo M.Pannier,

            gehe deine Schleife noch aml in Gedanken durch:
            for I:=0 to MDIChildCount-1 do MDIChildren[I].Close
            Wenn i den Wert 0 hat, wird das Fenster 0 geschlossen. Damit wird aber alles neu organisiert. i erreicht jetzt den Wert 1. Seit der Neuorganisation der Fenster existiert aber wieder ein Fenster[0].
            Und gerade das erreichst du in deiner Schleife nie mehr beim Schließen.
            Das bedeutet, daß du immer nur das Fenster[0] und nicht das Fenster[i] schließen kannst. Es ist, als ob du in einem Stapel Bauklötze immer den untersten wegziehst. Es gibt immer wieder einen untersten.

            mfg Klaus-Pete

            Comment

            Working...
            X