Einzelnen Beitrag anzeigen

Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Erhalte falsches modalResult

  Alt 1. Mär 2019, 11:04
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.
Andreas Lauß
Blog
  Mit Zitat antworten Zitat