加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

当调用ShowModal时,delphi – 窗体隐藏在其他窗体之后

发布时间:2020-12-15 10:16:43 所属栏目:大数据 来源:网络整理
导读:我的应用程序是基于模态形式。主窗体使用ShowModal打开一个窗体,此窗体使用ShowModal打开另一个窗体,因此我们已经堆叠了模态窗体。有时候会出现一个问题,当我们以新的形式调用ShowModal时,它隐藏在以前的表单之上,而不是在顶部显示。按Alt选项卡后,表
我的应用程序是基于模态形式。主窗体使用ShowModal打开一个窗体,此窗体使用ShowModal打开另一个窗体,因此我们已经堆叠了模态窗体。有时候会出现一个问题,当我们以新的形式调用ShowModal时,它隐藏在以前的表单之上,而不是在顶部显示。按Alt选项卡后,表单返回顶部,但这不是很好的解决方案。你遇到这个问题,你是怎么处理的?

编辑:

我使用Delphi 7。

解决方法

你没有提到哪个版本的Delphi …

较新的Delphi版本已经向TCustomForm添加了两个新属性:PopupMode和PopupParent。将您的模态对话框的PopupParent设置为创建该对话框的表单,确保子表单保持在其父对象的顶部。它通常会解决你所描述的问题。

我认为这对属性是在Delphi 2006中添加的,但它可能已经是2005年。他们绝对是在Delphi 2007和更高版本。

编辑:看到你使用Delphi 7之后,唯一的建议是,在显示你的模态窗体的代码中,你禁用创建它的表单,并在返回时重新启用。这应该阻止创建窗口接收输入,这可能有助于保持Z顺序正确。

像这样的东西可能会工作(未经测试,因为我不再使用D7):

procedure TForm1.ShowForm2;
begin
  Self.Enabled := False;
  try
    with TForm2.Create(nil) do
    begin
      try
        if ShowModal = mrOk then
          // Returned OK. Do something;
      finally
        Free;
      end;
    end;
  finally
    Self.Enabled := True;
  end;
end;

如果Form2创建了一个模态窗口(如前所述),只需重复该过程即可禁用Form2,创建Form3并以模态显示,并在返回时重新启用Form2。确保使用try..finally,如我所示,所以如果在模态窗体出现问题,创建表单总是被重新启用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读