Formulare dynamisch erstellen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Die Formularerstellung im Speicher steuern


Es ist nicht immer sinnvoll, alle Formulare einer Anwendung ständig im Speicher zu halten. Sie können den Speicherbedarf einer Anwendung reduzieren, indem Sie bestimmte Formulare nur bei Bedarf erstellen. Ein Dialogfeld wird beispielsweise nur benötigt, während der Benutzer Eingaben vornimmt.

So erstellen Sie in der IDE ein Formular, das erst zur Laufzeit erzeugt wird:

  1. Wählen Sie Datei > Neu > Formular, um ein neues Formular anzuzeigen.
  2. Löschen Sie das Formular aus der Liste Automatisch erzeugen der Seite Projekt > Optionen > Formulare. Dadurch wird das Formular beim Anwendungsstart nicht aufgerufen. Sie können auch manuell die folgende Zeile aus dem Quelltext des Haupteinsprungspunkt des Programms entfernen: Application.CreateForm(TResultsForm), ResultsForm);
    Application.CreateForm(TResultsForm, ResultsForm);
    
    Application->CreateForm(__classid(TResultsForm), &ResultsForm);
    
  3. Wenn Sie das Formular in der Anwendung benötigen, rufen Sie es mithilfe seiner Anzeigemethode auf. Nichtmodale Formulare werden mit Show, modale Formulare mit ShowModal angezeigt.

In einer Ereignisbehandlungsroutine des Hauptformulars müssen Sie eine Instanz des Formulars erstellen und wieder freigeben. Dazu können Sie wie im folgenden Beispiel die globale Variable verwenden. ResultsForm ist modal und wird daher mit der Methode ShowModal angezeigt.

procedure TMainForm.Button1Click(Sender: TObject);
begin
  ResultsForm := TResultForm.Create(self);
  try
    ResultsForm.ShowModal;
  finally
    ResultsForm.Free;
  end;
end;
void __fastcall TMainMForm::FirstButtonClick(TObject *Sender)
    ResultsForm = new TResultsForm(this);
    ResultsForm->ShowModal();
    delete ResultsForm;

Beachten Sie im oben gezeigten Beispiel die Verwendung von try...finally. Die Zeile ResultsForm.Free; wurde in die finally-Klausel aufgenommen, um sicherzustellen, dass der Speicher für das Formular auch dann freigegeben wird, wenn das Formular eine Exception auslöst.

Das Formular wird in diesem Beispiel nach dem Schließen sofort freigegeben. Es muss daher neu erstellt werden, wenn es an anderer Stelle wieder benötigt wird. Ein mit Show angezeigtes, nichtmodales Formular könnte so nicht freigegeben werden, da die Methode beendet wird, während das Formular noch geöffnet ist.

Hinweis: Wenn Sie ein Formular mithilfe des Konstruktors erstellen, müssen Sie darauf achten, dass es nicht bereits automatisch erstellt wurde. Wenn Sie das Formular nicht aus der Liste Automatisch erzeugen (Projekt > Optionen > Formulare) entfernen, geschieht Folgendes: Das Formular wird zuerst beim Programmstart von Delphi erstellt. Danach wird in einer Ereignisbehandlungsroutine eine neue Instanz des Formulars erzeugt, die die erste Instanz überschreibt. Obwohl die automatisch erstellte Instanz immer noch vorhanden ist, kann in der Anwendung nicht mehr darauf zugegriffen werden. Die globale Variable zeigt nach dem Beenden der Ereignisbehandlungsroutine nicht mehr auf ein gültiges Formular. Jeder Zugriffsversuch endet in einem Programmabsturz.

Siehe auch