将窗体设置为框架的父级时没有内存泄漏?

时间:2009-08-16 16:40:52

标签: delphi oop

为了避免更复杂的解决方案,框架调用父窗体中的一些例程,以便窗体可以杀死帧...我想知道是否可以简单地将窗体设置为框架的父窗口,并让Delphi调用Frame.Free用户关闭应用程序时?

procedure TForm1.FormShow(Sender: TObject);
var
  Frame2 : TFrame2;
begin
  //Frame2 := TFrame2.Create(nil);
  Frame2 := TFrame2.Create(Self);
  Frame2.Align := alClient;
  Frame2.Parent := Self;
  Frame2.Visible := True;
end;

谢谢。

2 个答案:

答案 0 :(得分:12)

实际上你让父母和老板感到困惑:

将所有者作为参数传递给构造函数,并将负责释放组件,父级是可视化包含控件的控件。

示例:

您有一个表单,该表单上的面板以及该面板上的标签: 表单通常是面板和标签的所有者。表单是面板的父级,面板是标签的父级。

关于你的问题:将包含框架的表单作为所有者传递是完全可以的。当表单被释放时,它也将释放框架。此外,您必须将父级设置为其他控件才能使框架可见。这当然也可以是形式,但这对释放框架没有任何影响。

答案 1 :(得分:1)

要清楚:
- 所有者负责拥有的组件存在,并在其自身销毁时释放它们(它们是所有者的一部分,不能存在没有它。) - 父级负责显示其子级(控件 - 没有父级,其可见属性无效),因此也会释放其控件摧毁自己,因为没有人能再展示它们了。