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,如我所示,所以如果在模态窗体出现问题,创建表单总是被重新启用。

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    Oracle 安装安全补丁过程中出现的问题
    Oracle 设置日志模式
    Oracle 设置archivelog错误解决方案
    sum() over() 函数的使用
    C盘清理,移动node 依赖和缓存文件
    ol设置最佳可视范围和限制缩放
    flex弹性布局模式下文字超出显示省略号
    查看svn本地账户和密码
    flutter apk启动闪退问题
    More than one file was found with OS independent path 'lib/armeabi-v7a/libflutter.so'
  • 原文地址:https://www.cnblogs.com/jijm123/p/13412856.html
Copyright © 2011-2022 走看看