【发布时间】:2012-09-13 16:38:57
【问题描述】:
我在 delphi 中有 VCL 应用程序。一种主要形式和许多子形式。 如何确保一次只打开一个表单。换句话说,如果打开一个表单,它将关闭以前的表单。或者,如果用户尝试打开与以前相同的表单,它将什么也不做。 在我的主表单中打开表单的代码:
procedure TFMainForm.OpenForm(const classname: string);
var
c: TPersistentClass;
f: TForm;
begin
c := GetClass(classname);
if c <> nil then
begin
f := TForm(TControlClass(c).Create(nil));
f.Parent := Self;
f.Show;
end;
end;
子窗体在关闭事件时自我释放。
【问题讨论】:
-
Form.Parent 相当危险的 hack。也许更好地使用 MDI 并确保它总是最大化? docwiki.embarcadero.com/RADStudio/en/…
-
@Arioch,虽然我看不出将父母身份分配给自己创建的表单有什么危险,但你是对的,看起来 OP 试图以错误的方式制作 MDI 应用程序。跨度>
-
是的,你是对的。我尝试制作 MDI 应用程序。但我希望子表单只填写主表单的一小部分。因此,我将子窗体设置为无边框,并将子窗体的父窗体设置为主窗体。
-
@TLama QC108580 - 一步错了你就瘫痪了。
-
那不是 MDI 应用程序。 Windows中的MDI由可见主窗口+不可见主宿主窗口+子窗口组成。我宁愿用标准的 MDI 方式做 MDI。
标签: delphi