Delphi返回showmodal的自定义结果

Ben*_*iss 2 delphi vcl delphi-7

我有一个带有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;
Run Code Online (Sandbox Code Playgroud)

模态形式:

 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;
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

And*_*and 13

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

ModalResult := MyVal; // This will close this modal window
                      // and the modal result will be MyVal
Run Code Online (Sandbox Code Playgroud)

也就是说,确保Button1ModalResult = mrNone,然后你可以做的事情

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

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

  • 更准确地说*关闭模态窗口分配一个不同于0*的值. (5认同)
  • @David:这种自由:`如果Sth1然后ModalResult:= 1337否则如果Sth2然后ModalResult:= 1338` (3认同)
  • 您可以简单地将表单设计器中的 ModalResult 属性设置为您的特殊值,而不是编写 OnClick 处理程序。 (2认同)
  • @David:但是你会失去一些自由. (2认同)