Code:
TForm1 = class(TForm)
btnOK: TButton;
btnAbbrechen: TButton;
procedure btnOKClick(Sender: TObject);
procedure btnAbbrechenClick(Sender: TObject);
function modalErgebnis(): String;
procedure FormActivate(Sender: TObject);
end;
...
procedure TForm1.btnOKClick(Sender: TObject);
begin
Form1.ModalResult:=mrOk;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowMessage( modalErgebnis() );
end;
procedure TForm1.btnAbbrechenClick(Sender: TObject);
begin
Form1.ModalResult:=mrCancel;
end;
function TForm1.modalErgebnis(): String;
begin
if Form1.ModalResult=mrOk then
begin
result:='OK';
end
else if Form1.ModalResult=mrCancel then
begin
result:='Abbrechen';
end
else
begin
result:='False';
end;
end;
- Wenn man auf die Variable des Forms (bei dir Form1) innerhalb der Form-Unit direkt zugreift, kann das in manchen Fällen Probleme geben. Ich würde an deiner Stelle lieber Self. statt Form1. verwenden oder den Namen komplett weglassen. Aus anderen Units z. B. Unit2 musst du natürlich Form1. voranstellen um auf das Form1 aus Unit1 zuzugreifen können.
- Wie old7 schon geschrieben hat, muss natürlich das Form via ShowModal aufgerufen werden damit du an ModalResult rankommst (Rückgabe-Wert von ShowModal).
- Du musst das ModalResult bei den Buttons nicht zwangsläufig im Code setzen. Du kannst einfach die ModalResult-Eigenschaft des Buttons im Objekt-Inspector festlegen. Bei einem Klick wird das ModalResult automatisch übergeben.
- Wenn du mehrere Buttons hast mit jeweils unterschiedlichen ModalResults kannst du die Auswertung mit Case statt If machen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
case Form2.ShowModal of
begin
mrOK: ShowMessage('OK gedrückt');
mrCancel: ShowMessage('Abbrechen gedrückt');
mrYes: ShowMessage('Ja gedrückt');
mrNo: ShowMessage('Nein gedrückt');
...
end
else
ShowMessage('Ein ModalResult wurde zurückgegeben das nicht im Case steht!');
end;
Der Else-Zweig ist Optional.