【问题标题】:How to close a modal form and all the modal forms that were opened from it?如何关闭模态表单以及从中打开的所有模态表单?
【发布时间】:2013-06-04 13:51:17
【问题描述】:

现实生活中的例子:我的应用程序有一个 MainForm。用户可以单击按钮并登录以查看模态 AdminSettingsForm。从 AdminSettingsForm,他可以打开更多的模态表单等等。

当用户登录以显示 AdminSettingsForm 时,会启动一个计时器,该计时器应在一段时间不活动(空闲)后关闭 AdminSettingsForm。

我试过这个:

 for i := Screen.FormCount - 1 downto 1 do begin
   if Screen.Forms[i] <> MainForm then begin
     Screen.Forms[i].Close();
   end;
 end;

在我关闭最顶层的模态表单之前什么都不会发生,然后其他所有内容都会立即关闭。

【问题讨论】:

    标签: delphi modal-dialog delphi-5


    【解决方案1】:

    试试这个

    with Screen do
         for I := FormCount - 1 downto 0 do
           if Forms[I] <> Application.MainForm then
               Forms[I].Close;
    

    【讨论】:

      【解决方案2】:

      对不起,我想我已经找到了解决办法:

       Screen.ActiveForm.Close();
      
       for i := Screen.FormCount - 1 downto 1 do begin
         if Screen.Forms[i] <> MainForm then begin
           Screen.Forms[i].Close();
         end;
       end;
      

      似乎有效...

      【讨论】:

      • 这假定除MainForm 之外的所有表单都将用于管理。如果您曾经为非管理用户创建新表单怎么办?
      • 你是对的。这个假设目前适用于我的应用程序。实际上,我确实为非管理员用户提供了其他表单,但是还有另一个假设,即从 MainForm 触发的任何表单都是模态的。所以目前我知道当 AdminForm 显示时,没有其他表单可见。当这个假设不再成立时,我会努力寻找更好的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      相关资源
      最近更新 更多