Delphi XE5 Anonymous ShowModal无法按预期工作
我是Delphi XE5的新手,目前正在使用Delphi XE5在我的Windows桌面上开发Android平台应用程序。 我有两种形式(Form1和Form2),并试图按照Marco的RAD博客(http://blog.marcocantu.com/blog/xe5_anonymous_showmodal_android.html)中显示的方式在Form1上以模态方式显示Form2。
但结果并不如预期。
procedure TForm1.Button1Click(Sender: TObject);
var
frm2: TForm2;
begin
frm2 := TForm2.Create(nil);
ShowMessage('before frm2.ShowModal...');
frm2.ShowModal (
procedure(ModalResult: TModalResult)
begin
if ModalResult = mrOK then
if frm2.ListBox1.ItemIndex >= 0 then
edit1.Text := frm2.ListBox1.Items [frm2.ListBox1.ItemIndex];
frm2.DisposeOf;
end
);
ShowMessage('after frm2.ShowModal...');
end;
我写了上面的代码并在Android设备上运行应用程序。 我点击了Button1,然后我得到了“frm2.ShowModal ...”之前的消息框,然后是“frm2.ShowModal ...”之后的消息框,然后显示了Form2。
我期望的顺序应该是1)“frm2.ShowModal ...”之前的消息,2)正在显示的Form2,以及3)“之后的frm2.ShowModal ...”消息。
我怎么了?
对匿名ShowModal
的调用不会被阻塞,这意味着ShowModal
之后的任何代码都将首先执行。
一个说明在这里。 调用frm2.DisposeOf
是错误的。 你必须使用这种模式:
宣布
procedure TFrm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := TCloseAction.caFree;
end;
请参阅http://www.malcolmgroves.com/blog/?p=1585。 该文档已在XE7中使用FireMonkey模式对话框进行了更正,但此模式可用于所有Delphi版本。
结论 :如果要在模式对话框关闭后执行代码,请将该代码放入匿名方法中。
链接地址: http://www.djcxy.com/p/50635.html上一篇: Delphi XE5 Anonymous ShowModal doesn't work as expected
下一篇: Delphi XE5 FireMonkey TstringGrid cells don't accept keyboard input