动态表单创建

8 delphi

我在运行时创建我的表单,如下所示:

AboutForm := TAboutForm.Create(AboutForm);
try
  AboutForm.ShowModal;
finally
  AboutForm.Free;
end;
Run Code Online (Sandbox Code Playgroud)

但是使用其中任何一个有什么区别:

AboutForm := TAboutForm.Create(Self);
AboutForm := TAboutForm.Create(nil);
AboutForm := TAboutForm.Create(Application);
Run Code Online (Sandbox Code Playgroud)

它们似乎从我能看到的相同但是哪个是正确的,或者它们都是正确的,这通常是最好用的?

感谢您的评论谢谢:)

Jør*_*eit 9

TForm.Create采用Owneras参数.

在您的第一个示例中,AboutForm是所有者.这显然是一个坏主意,因为它尚未创建.

如果Self是参数,则进行调用的实例是所有者.
何时Application是参数,Application是所有者.
何时nil是参数,AboutForm doen没有所有者.这一切都很好,但在这些情况下,你必须记得自己释放表格.

当您传入所有者时,您实际上不需要明确释放我.当所有者被释放时,所有者将释放它.

这就是你的代码应该是这样的:

AboutForm := TAboutForm.Create(nil);
try
  AboutForm.ShowModal;
finally
  AboutForm.Free;
end;
Run Code Online (Sandbox Code Playgroud)


Pre*_*ias 5

当您动态创建表单时,表单就是available表单.你必须传递owner表格.

在此输入图像描述

..所以在你的情况下

AboutForm:= TAboutForm.Create(Self);

AboutForm:= TAboutForm.Create(nil);

AboutForm:= TAboutForm.Create(Application);

  1. 应用

是for的所有者AboutForm(你可能已经知道了)

But what is the difference though in using any of these:

这是来自about.com-Form Owner的东西

nil - 指定没有对象拥有该表单 - 因此开发人员(您)负责释放创建的表单(通过在不再需要表单时调用myForm.Free)

Self - 指定调用方法的对象.例如,如果您正在从Button的OnClick处理程序(此按钮放在MainForm上)中创建TMyForm表单的新实例 - self指的是"MainForm".因此,当MainForm被释放时 - 它也将释放"MyForm".

应用程序 - 指定运行应用程序时创建的全局TApplication类型变量."应用程序"封装了您的应用程序,并提供了在程序后台出现的许多功能.

这也是表单所有者

a)Formx.Create(应用程序) - >终止应用程序时将释放表单资源

b)Formx.Create(Self) - >在销毁所有者对象时释放表单资源(如果Self是TComponent的后代)

c)Formx.Create(无) - >您负责释放表格.

这是来自

一个用于用Delphi当窗体自动创建

b对于主窗体来说很方便,它有几个子窗口,当主窗体关闭时需要关闭它们

c对于显示对话窗口很方便

为了解放,您可以ACtion := caFree在表单的附近执行此操作.