DRo*_*kie 8 delphi modal-dialog
我有一个Modal表单,在Ok按钮中它处理一些信息,我需要在调用模态表单的表单中.
如何在关闭之前将其取出?
或延迟关闭,直到我说它可以关闭.
Dav*_*nan 11
我希望你的OK按钮ModalResult设置为mrOK.如果要将错误检查添加到"确定"按钮,请将其更改为mrNone.OnClick在按钮上添加一个处理程序,可以执行您需要的任何检查或处理.如果确定表单可以关闭,则Self.ModalResult := mrOK在OnClick处理程序中设置.
在表单关闭之前,您真的需要访问这些信息吗?延迟关闭表单会影响应用程序的用户体验(除非它足够快,以至于他们没有注意到 - 在这种情况下为什么要延迟它?)
内存中仍然有一个封闭的表单可供调用者使用(除非关闭操作是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)
只是其他人所说的组合.
最好形式化如何从模态对话框中验证和获取数据.一遍又一遍地使用相同的技术使得一切都更容易维护和阅读.
一个例子 :
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)