2013-06-04 60 views
1

现实生活中的例子:我的应用程序有一个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; 

没有任何反应,直到我关闭最顶层的模式窗体,然后一切会马上闭合。

回答

0

我很抱歉,但我想我已经找到了解决办法:

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; 

似乎工作...

+0

这是假设所有形式比其他' MainForm'将用于管理使用。如果您为非管理用户创建新表单会怎么样? –

+1

你是对的。这个假设目前适用于我的申请。其实我还有非管理员用户的其他形式,但还有另一种假设,即从MainForm触发的任何形式都是模态的。所以目前我知道当AdminForm显示时,没有其他窗体可见。当这种假设不再成立的时候,我会为了更好的解决方案而伤透脑筋。 – Zalumon

0

试试这个

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