Owner 和 Parent Owner 和 Parent的区别?他们分别什么时候用,请举例?通了给分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还有一问?var E : TEdit ; E := TEdit.Create(Self) ; E.Parent := self ; self 是 owner ,parent var Btn: TButton ;begin Btn := TButton.Create(Panel2); //Owner Btn.Parent := Panel1 ;end;Owner指它的创建者,即Panel2Parent是它显示在哪,即Panel1当panel2.free后,Btn也就Free了而Panel1.free后,Btn是不见了,但是还存在,你可以把它的Parent设为Panel2,就可以显示出来 Parent属性是指构件的包容器,构件只能在此范围内显示和移动。举例子如下: (1)在Form1的窗体上,放一个Panel1,并将Panel1拉大, (2)在Panel1上放一Button1; (3)在Form1上放一Button2。 现在如果移动Panel1,则Button1随着Panel1移动,这是因为Button1的Parent是Panel1。现在将Button2移到Panel1上,再次移动Panel1,Button2并不跟着移动,这是因为Button2的Parent是Form1。除在窗体设计中,应注意构件的Parent是谁外,在动态创建构件时,也应指出构件的Parent,如在上例中继续操作: 1)Procedure Tform1.Button2click(Sender:Tobjet); 2)Var 3) Button:Tbutton; 4) Begin 5) Button:Tbutton.cerate(self); 6) Button.parent=panel1; 7) Button.lleft=0; 8) Button.top=0; 9) Button.caption:='OK'; 10) End; 当按Button2时,将在Panel1上创建一个Button,而如果把第6句改为Button.parent:=self;按Button2时,将在Form1上创建一个Button了。如果将第6句删除,按Button2时,什么都不会发生,这是因为创建方法无法知道应在哪里显示构件。 Owner属性是指构件的所有者,它负责构件的创建和释放。如在上例中,系统默认窗体上所有构件的所有者是窗体,而窗体的所有者是Application。顺便指出,create方法应带有表示构件所有者的参数,如在上例中,构件所有者是窗体,即self。 Parent属性和Owner属性是运行阶段的属性,只能在运行阶段,通过代码设置 后面的问题Self就是当前窗体在你的例子中,Self即使Owner也是Parent实际上Owner和Parent可以是不同的对象 Owner的意思是“谁负责释放我内存呀?”Parent是“谁包含我呀?” SCOKET批量接收文件? 数据库问题 一个控件的问题,帮忙呀?在线等。。。 关于登录权限问题 求助,关于“跨窗体传递数据的问题”? 怎样给Speedbutton聚焦时添加声音? DBNavigator1在删除记录时会显示"Delete Record",请问怎么才能改变它为中文或其他的汉字? 请问在DBGRID中某一行得到焦点的事件在那里啊! 如何让memo中按下一个key后让这个key不显示? 一个自定义函数问题! 又有100分,来抢吧。。。 各位高手,编组件的问题。
var E : TEdit ;
E := TEdit.Create(Self) ;
E.Parent := self ; self 是 owner ,parent
begin
Btn := TButton.Create(Panel2); //Owner
Btn.Parent := Panel1 ;
end;Owner指它的创建者,即Panel2Parent是它显示在哪,即Panel1当panel2.free后,Btn也就Free了
而Panel1.free后,Btn是不见了,但是还存在,你可以把它的Parent设为Panel2,就可以显示出来
(1)在Form1的窗体上,放一个Panel1,并将Panel1拉大,
(2)在Panel1上放一Button1;
(3)在Form1上放一Button2。 现在如果移动Panel1,则Button1随着Panel1移动,这是因为Button1的Parent是Panel1。现在将Button2移到Panel1上,再次移动Panel1,Button2并不跟着移动,这是因为Button2的Parent是Form1。除在窗体设计中,应注意构件的Parent是谁外,在动态创建构件时,也应指出构件的Parent,如在上例中继续操作:
1)Procedure Tform1.Button2click(Sender:Tobjet);
2)Var
3) Button:Tbutton;
4) Begin
5) Button:Tbutton.cerate(self);
6) Button.parent=panel1;
7) Button.lleft=0;
8) Button.top=0;
9) Button.caption:='OK';
10) End; 当按Button2时,将在Panel1上创建一个Button,而如果把第6句改为Button.parent:=self;按Button2时,将在Form1上创建一个Button了。如果将第6句删除,按Button2时,什么都不会发生,这是因为创建方法无法知道应在哪里显示构件。 Owner属性是指构件的所有者,它负责构件的创建和释放。如在上例中,系统默认窗体上所有构件的所有者是窗体,而窗体的所有者是Application。顺便指出,create方法应带有表示构件所有者的参数,如在上例中,构件所有者是窗体,即self。 Parent属性和Owner属性是运行阶段的属性,只能在运行阶段,通过代码设置
Self就是当前窗体
在你的例子中,Self即使Owner也是Parent
实际上Owner和Parent可以是不同的对象
Parent是“谁包含我呀?”