首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有些Delphi组件需要"AOwner: TComponent“来构造它们?

为什么有些Delphi组件需要"AOwner: TComponent“来构造它们?
EN

Stack Overflow用户
提问于 2009-01-23 20:45:51
回答 6查看 6.4K关注 0票数 15

要求TComponent作为所有者来实例化某种对象似乎完全无关紧要。为什么有这么多的Delphi组件需要这样做?

例如,TXMLDocument需要一个TComponent对象来实例化。

为什么会这样?如果有很好的理由,我应该用什么来“做正确的事情”?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-01-23 21:14:19

所有者组件应该管理其拥有的所有组件。当所有者被销毁时,所拥有的组件将自动销毁。

这有助于开发人员从工具面板中拖动组件,将它们放在窗体上,并只挂起事件来完成工作,而无需担心管理组件的生命周期。

该表单是拖放到该表单上的所有组件的所有者。Application对象是窗体的所有者。当应用程序关闭时,Application对象将被销毁,这反过来又会销毁表单和所有组件。

但在创建组件时,所有者实际上并不是必需的。如果您将Nil传递给该参数,则将在没有所有者的情况下创建组件,在这种情况下,您将负责管理组件的生命周期。

票数 38
EN

Stack Overflow用户

发布于 2009-01-23 21:29:27

所有的TComponent后代都需要所有者,它是在TComponent构造函数中定义的。所有者组件负责销毁所有拥有的组件。

如果你想控制生命周期,你可以传入nil作为参数。

票数 9
EN

Stack Overflow用户

发布于 2009-01-23 22:02:55

只是为了增加一些额外的信息。

每个控件也有一个父级。(一个TWinControl)。在所有者负责生命周期的情况下,父级负责显示对象。

例如,一个窗体有一个面板,而面板有一个按钮。在这种情况下,窗体拥有面板和按钮。但是窗体是面板的父级,而面板是按钮的父级。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/474448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档