在Modal表单关闭之前获取数据

DRo*_*kie 8 delphi modal-dialog

我有一个Modal表单,在Ok按钮中它处理一些信息,我需要在调用模态表单的表单中.

如何在关闭之前将其取出?

或延迟关闭,直到我说它可以关闭.

Dav*_*nan 11

我希望你的OK按钮ModalResult设置为mrOK.如果要将错误检查添加到"确定"按钮,请将其更改为mrNone.OnClick在按钮上添加一个处理程序,可以执行您需要的任何检查或处理.如果确定表单可以关闭,则Self.ModalResult := mrOKOnClick处理程序中设置.

  • 恭喜已经达到[所有时间Delphi用户](http://stackoverflow.com/tags/delphi/topusers)的顶部. (3认同)

Jam*_*ass 7

在表单关闭之前,您真的需要访问这些信息吗?延迟关闭表单会影响应用程序的用户体验(除非它足够快,以至于他们没有注意到 - 在这种情况下为什么要延迟它?)

内存中仍然有一个封闭的表单可供调用者使用(除非关闭操作是caFreeOnClose).因此,您应该能够将公共属性添加到表单中,然后您可以在调用者中访问该表单.

例如

Type Form2 = Class(TForm)
public
    //Add a public property here
end;
Run Code Online (Sandbox Code Playgroud)

来自来电者:

if Form2.ShowModal = mrOk then
begin
    InformationIWant = Form2.PublicProperty;
end;
Run Code Online (Sandbox Code Playgroud)


LU *_* RD 5

只是其他人所说的组合.

最好形式化如何从模态对话框中验证和获取数据.一遍又一遍地使用相同的技术使得一切都更容易维护和阅读.

一个例子 :

Type TFormModal = Class(TForm)
  procedure OnOkClick( Sender : TObject);
  function ValidateInterface : boolean;

public
  procedure SetInterface( input data here);
  procedure GetInterface( output data here);

end;

procedure TFormModal.OnOkClick( Sender : TObject);
begin
  if ValidateInterface 
    then modalResult := mrOk
    else modalResult := mrNone;
end;
Run Code Online (Sandbox Code Playgroud)

从您的主要表格:

procedure MainForm.OnShowMyModalFormClick( sender : TObject);
var
  myModal : TFormModal;
begin
  ...
  myModal := TFormModal.Create( nil);
  try
    myModal.SetInterface( ...);
    if (myModal.ShowModal = mrOk) then myModal.GetInterface(...);

  finally
    myModal.Free;
  end;
  ...
end;
Run Code Online (Sandbox Code Playgroud)