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

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    leetcode-442-数组中重复的数据
    leetcode-83-删除排序链表中的重复元素
    leetcode-80-删除排序数组中的重复项 II
    leetcode-26-删除排序数组中的重复项
    leetcode-889-105-106-根据前-中-后遍历构造二叉树
    leetcode-88-合并两个有序数组
    凉了!张三同学没答好「进程间通信」,被面试官挂了....
    多线程为了同个资源打起架来了,该如何让他们安定?
    Xlua中LuaBehaviour的实现
    Elasticsearch实战一
  • 原文地址:https://www.cnblogs.com/jijm123/p/13412856.html
Copyright © 2011-2022 走看看