Delphi中Owner和Parent的区别

在 英语中,Owner 的语义是“物主,所有人”,Parent 的语义是“父亲(或母亲)”等的意思。

而在 delphi 语言里,这两个单词所代表的含义之英文原意相仿。两者的区别在于:

1、Owner 指构件的 “所有者”,它负责构件的创建和释放。

Parent 指构件的包容器(构件的上一层构件:“父母”),构件只能在此范围内显示和移动。

2、与 Owner 关联的对象是 TComponent(元件),而与 Parent 关联的是TControl(控件)。

举例说明:

在窗体 (TForm1) 上放置1个 Panel,并在 Panel 中再添加 Label、Edit 和 Button ,然后运行代码检测各控件的 Owner 和 Parent 值:

procedure?TForm1.Button1Click(Sender:?TObject);

var

i:?Integer;

begin

for?i?:=?0?to?ComponentCount-1?do

begin

Memo1.Lines.Add('控件名称:'?+?Components[i].Name);

Memo1.Lines.Add('控件的?Owener:'?+?Components[i].Owner.Name);

if?Components[i]?is?TControl?then?//只有控件才有?Parent

begin

Memo1.Lines.Add('控件的?Parent:'?+?TControl(Components[i]).Parent.Name);

end;

Memo1.Lines.Add('');

end;

end;

代码运行结果:

从结果可以看出,所有的控件,其 Owner 值都是 Form1(窗体), 而只有上步“Panel 中再添加 Label、Edit 和 Button ”的三个控件,其 Parent 才是 Form1。