Ich implementiere immer eine Methode TForm.Setup, die das Formular initialisiert, die edits leert, Variablen zurücksetzt und das Formular in einen definierten Anfangszustand versetzt (ActiveControl etc.). Dann rufe ich das Formular nicht einfach über ShowModal auf, sondern schreibe mir eine kleine Routine, die das macht. Das ist auf den ersten Blick etwas umständlich, aber ich finde, Anweisungen sollten da stehen, wo sie hingehören.
Delphi-Quellcode:
Function EditKunden (aKunde : TKunde) : TModalResult;
...
Implementation
...
Function EditKunden (aKunde : TKunde) : TModalResult;
Begin
If Not Assigned (fmEditKunde) Then Application.CreateForm (TfmKunde, fmKunde);
With fmKunde Do Begin
Setup (aKunde);
// hier passiert vielleicht noch mehr...
Result := ShowModal;
End;
End;
Wieso muss der Aufrufer wissen, das man das Formular mit Setup initialisieren muss? Eben deshalb schreibe ich diese 'EditXXXX' Funktionen. Allerdings mache ich es i.A. nicht über
Application.CreateForm. Ich hatte neulich mal eine Ausnahme: Das Formular zum Bearbeiten eines Auftrags enthielt ettliche Grids, Edits, Lookuplisten etc. Das Erzeugen (mit Create) und das Initialisieren dauert 500-900ms: zu lang für ein Callcenter. Also wurde dieses eine Formular wie oben beschrieben, erzeugt.
Meine Edits sehen so aus:
Delphi-Quellcode:
Function EditKunden (aKunde : TKunde) : TModalResult;
...
Implementation
...
Function EditKunden (aKunde : TKunde) : TModalResult;
Begin
With TfmEditKunde.Create (Nil) Do Begin
Setup (aKunde);
// hier passiert vielleicht noch mehr...
Result := ShowModal;
Release; // Kein Free, weil nur Release garantiert, das vorher die message queue geleert wird.
End;
End;
Damit ist das Formular immer in einem wohldefinierten Zustand, ich verbrate keine Resourcen, falls auf dem Formular TDBEdits sind, geht meine Performance nicht in die Knie, usw. Das Wichtigste ist aber (frei nach Sepp Herberger):
Zitat:
Nach dem Aufruf ist vor dem Aufruf