zoukankan      html  css  js  c++  java
  • 当调用ShowModal时,delphi – 窗体隐藏在其他窗体之后

    我的应用程序是基于模态形式。主窗体使用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,如我所示,所以如果在模态窗体出现问题,创建表单总是被重新启用。

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    mysql无法启动-You may have to recover from a backup
    mysql导出索引sql 导出索引创建语句
    Padavan路由器设置桥接多路由器同WIFI方法
    挖的坑还是要填的
    I'm Back
    40行加速头文件
    一些XJOI博客的密码
    p进制线性基填坑
    Dirichelet卷积的k次方根
    用pb_ds写一颗线段树
  • 原文地址:https://www.cnblogs.com/jijm123/p/13412856.html
Copyright © 2011-2022 走看看