我在运行时创建表单,如下所示:
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/