Computerwissenschaften

So kommunizieren Sie zwischen Formularen

Modale Formulare bieten bestimmte Funktionen, die wir bei der nicht modalen Anzeige nicht haben können. Am häufigsten wird ein Formular modal angezeigt, um seine Prozesse von allem zu isolieren, was sonst auf dem Hauptformular passieren könnte. Sobald diese Vorgänge abgeschlossen sind, möchten Sie möglicherweise wissen, ob der Benutzer die Schaltfläche Speichern oder Abbrechen gedrückt hat, um das modale Formular zu schließen. Sie können einen interessanten Code schreiben, um dies zu erreichen, aber es muss nicht schwierig sein. Delphi liefert modale Formulare mit der ModalResult-Eigenschaft, anhand derer wir feststellen können, wie der Benutzer das Formular verlassen hat.

Der folgende Code gibt ein Ergebnis zurück, die aufrufende Routine ignoriert es jedoch:

var
F: TForm2;
begin
F:=TForm2.Create ( nil );
F. ShowModal;
F. Release;
...

Das oben gezeigte Beispiel zeigt nur das Formular, lässt den Benutzer etwas damit machen und gibt es dann frei. Um zu überprüfen, wie das Formular beendet wurde, müssen wir die Tatsache nutzen, dass die ShowModal-Methode eine Funktion ist, die einen von mehreren ModalResult-Werten zurückgibt. Ändern Sie die Zeile

F.ShowModal

zu

wenn  F.ShowModal=mrOk  dann

Wir benötigen Code in der modalen Form, um alles einzurichten, was wir abrufen möchten. Es gibt mehr als eine Möglichkeit, das ModalResult abzurufen, da TForm nicht die einzige Komponente mit einer ModalResult-Eigenschaft ist – TButton hat auch eine.

Schauen wir uns zuerst TButtons ModalResult an. Starten Sie ein neues Projekt und fügen Sie ein zusätzliches Formular hinzu (Delphi IDE-Hauptmenü: Datei -> Neu -> Formular). Dieses neue Formular hat den Namen ‚Form2‘. Fügen Sie als Nächstes einen TButton (Name: ‚Button1‘) zum Hauptformular (Form1) hinzu, doppelklicken Sie auf die neue Schaltfläche und geben Sie den folgenden Code ein:

Prozedur TForm1.Button1Click (Absender: TObject);
var f: TForm2;
begin
f:=TForm2.Create ( nil );
versuche 
wenn f.ShowModal=mrOk dann
Bildunterschrift:='Ja'
sonst
Beschriftung:='Nein';
endlich
f.Release;
Ende ;
Ende ;

Wählen Sie nun das zusätzliche Formular aus. Geben Sie ihm zwei TButtons und beschriften Sie einen mit ‚Speichern‘ (Name: ‚btnSave‘; Beschriftung: ‚Speichern‘) und den anderen mit ‚Abbrechen‘ (Name: ‚btnCancel‘; Beschriftung: ‚Abbrechen‘). Wählen Sie die Schaltfläche Speichern und drücken Sie F4, um den Objektinspektor aufzurufen. Scrollen Sie nach oben / unten, bis Sie die Eigenschaft ModalResult finden, und setzen Sie sie auf mrOk. Kehren Sie zum Formular zurück und wählen Sie die Schaltfläche Abbrechen, drücken Sie F4, wählen Sie die Eigenschaft ModalResult aus und setzen Sie sie auf mrCancel.

So einfach ist das. Drücken Sie nun F9, um das Projekt auszuführen. (Abhängig von Ihren Umgebungseinstellungen fordert Delphi Sie möglicherweise auf, die Dateien zu speichern.) Wenn das Hauptformular angezeigt wird, drücken Sie die zuvor hinzugefügte Schaltfläche1, um das untergeordnete Formular anzuzeigen. Wenn das untergeordnete Formular angezeigt wird, klicken Sie auf die Schaltfläche Speichern, und das Formular wird geschlossen. Sobald Sie zum Hauptformular zurückkehren, beachten Sie, dass die Beschriftung „Ja“ lautet. Drücken Sie die Taste des Hauptformulars, um das untergeordnete Formular erneut aufzurufen. Drücken Sie diesmal jedoch die Taste Abbrechen (oder das Systemmenü Schließen-Element oder die Taste [x] im Beschriftungsbereich). Die Beschriftung des Hauptformulars lautet „Nein“.

Wie funktioniert das? Um dies herauszufinden, werfen Sie einen Blick auf das Click-Ereignis für TButton (von StdCtrls.pas):

Prozedur TButton.Click;
var Form: TCustomForm;
Start
Form:=GetParentForm (Self);
wenn Form nil dann
Form.ModalResult:=ModalResult;
geerbter Klick;
Ende ;

Was passiert ist, dass der  Eigentümer  (in diesem Fall die sekundäre Form) von TButton sein ModalResult entsprechend dem Wert des ModalResult des TButton erhält. Wenn Sie TButton.ModalResult nicht festlegen, lautet der Wert mrNone (standardmäßig). Selbst wenn der TButton auf einem anderen Steuerelement platziert ist, wird das übergeordnete Formular weiterhin zum Festlegen des Ergebnisses verwendet. Die letzte Zeile ruft dann das Click-Ereignis auf, das von seiner Vorgängerklasse geerbt wurde.

Um zu verstehen, was mit dem Forms ModalResult passiert, lohnt es sich, den Code in Forms.pas zu überprüfen, den Sie unter .. \ DelphiN \ Source finden sollten (wobei N die Versionsnummer darstellt).

In der ShowModal-Funktion von TForm wird direkt nach dem Anzeigen des Formulars die Repeat-Until-Schleife gestartet, die weiterhin prüft, ob die Variable ModalResult einen Wert größer als Null aufweist. In diesem Fall schließt der endgültige Code das Formular.

Sie können ModalResult zur Entwurfszeit wie oben beschrieben festlegen, aber Sie können die ModalResult-Eigenschaft des Formulars auch zur Laufzeit direkt im Code festlegen.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.