delphi - 动态表单创建

标签 delphi

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

AboutForm := TAboutForm.Create(AboutForm);
try
  AboutForm.ShowModal;
finally
  AboutForm.Free;
end;

但是使用这些有什么区别:

AboutForm := TAboutForm.Create(Self);
AboutForm := TAboutForm.Create(nil);
AboutForm := TAboutForm.Create(Application);

从我所看到的来看,它们的工作原理似乎都是相同的,但哪一个是正确的,或者它们都是正确的,通常哪一个是最好使用的?

感谢您的评论,谢谢:)

最佳答案

TForm.Create 采用 Owner 作为参数。

在第一个示例中,AboutForm 是所有者。这显然是一个坏主意,因为它还没有创建。

Self为参数时,调用的实例就是所有者。
Application 为参数时,Application 为所有者。
nil为参数时,AboutForm没有所有者。没关系,但在这种情况下,您必须记住自己释放表单。

当您确实传递所有者时,实际上不需要显式释放 i 。当所有者被释放时,所有者也会释放它。

您的代码应如下所示:

AboutForm := TAboutForm.Create(nil);
try
  AboutForm.ShowModal;
finally
  AboutForm.Free;
end;

关于delphi - 动态表单创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9220963/

相关文章:

delphi - 从Base64文本文件中删除所有CRLF

delphi - 将命令发送到程序 Delphi-7 时出现问题

Delphi正确使用TMultiView

delphi - Windows 服务和 TThread

delphi - 已排序的TStringList,排序是如何工作的?

delphi - 编辑提示锁定程序

c++ - 从 C++ DLL 中的 Delphi 应用程序中回调

database - 进行更改后更新网格

Delphi:如何在虚拟方法上调用继承的继承祖先?

delphi - 随机 Indy 响应代码 = -1/EIdSocketError 套接字错误 # 0 异常