【发布时间】:2012-04-24 08:33:08
【问题描述】:
我有一个功能可以关闭应用程序中除主窗体之外的所有窗体
procedure CloseOpenForms(const Component: TComponent);
var
i: Integer;
begin
for i := 0 to pred(Component.ComponentCount) do
begin
CloseOpenForms(Component.Components[i]);
if Component.Components[i] is TForm then
begin
TForm(Component.Components[i]).OnCloseQuery := nil;
TForm(Component.Components[i]).Close;
end;
end;
end;
从主窗体调用:
CloseOpenForms(Self);
只要没有活动的 OLE 对话框(例如 TJvObjectPickerDialog),它就可以正常工作。
如何强制关闭这些非模态 OLE 对话框?
【问题讨论】:
-
TJvObjectPickerDialog例如实现了IDsObjectPicker接口,它没有任何取消显示对话框的方法(仅仅是因为它旨在显示为没有 的模式对话框从其他地方取消选项)。我的猜测是,不可能以干净的方式做到这一点(如果有办法的话)。 -
您是如何创建表单的?我打赌你没有使用
Application.CreateForm。 -
正确。每个表单都在需要时创建:AForm := TMyForm.Create(Self)
-
您必须让
Application成为表单的所有者才能使其正常工作。因此,对于您的情况,它将是AForm := TMyForm.Create(Application)。