3

我有一个带有 2 个按钮的表单(1 是 mrOK - 1 是 mrCancel)。无论如何,只要我单击其中一个按钮,表单就会关闭(调用 OnClose)。

我想返回一个自定义值。像这样:

procedure OpenForm;
var
 MyForm : TMyForm;
begin
 MyForm := TMyForm.Create (NIL);
 try 
  if MyForm.ShowModal = 1337 then begin
   // [...]
  end;
 finally
  MyForm.Free
 end;
end;

模态形式:

 procedure TMyForm.Button1Click(Sender: TObject); // mrOK
 begin
  if Edit1.Text = '' then abort; // Don't close here?!
 end;

 procedure TExecutePrompt.FormClose(Sender: TObject;
 var Action: TCloseAction);
 begin
  if Edit1.Text = '' then abort; // Works but if the user clicks the X it should return mrCancel
 end;

希望你明白我想做什么。这是一个带有编辑控件的提示窗口。如果控件中没有文本,则表单应保留到输入文本(除非单击 X)。

谢谢你的帮助。

4

1 回答 1

17

要关闭具有某些特定模态结果值的模态窗口,只需指定

ModalResult := MyVal; // This will close this modal window
                      // and the modal result will be MyVal

也就是说,确保Button1has ModalResult = mrNone,然后你可以做类似的事情

procedure TMyForm.Button1Click(Sender: TObject); // mrOK
begin
  if Edit1.Text <> '' then ModalResult := 1337;
end;

如果编辑框不为空,这将关闭表单,并且模态结果将为1337.

于 2012-08-29T11:33:35.850 回答