急求解答:self与owner ,sender与parent的区别
解决方案 »
- d7 ExcelWorksheet1赋值提示:类型不匹配
- delphi 运行中的问题 大家快来帮忙啊
- 两个菜的问题!!小女羞了!!
- 请教关闭MDI子窗口的问题!
- 怎样实现按ctrl+u光标在 用户名:|光标跳到这| ,按ctrl+p,就在 密码:|光标跳到这|
- 如何在程序中实现循环等待!
- 程序中使用到的字体在没有安装该种字体的计算机上无法正常显示,如何解决
- 从listbox汇入数据库,为什么内容不完全?
- To :tikkypeng(一两狂死郎之天衣有缝)
- 在delphi中,怎样实现通过串行端口读取单片机中的数据
- 关于函数调用的问题
- combobox1.items.addobject()中的对象需要释放吗?
Owner属性是指构件的所有者,它负责构件的创建和释放。
Owner为创建者,Parent为容器 他们的类型不同,Owner为TComponent(元件),Parent为TWinControl(窗体控件);在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的构件;
Self是指所编的程序范围是在哪一个类中,Delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self 指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件.
另外应注意,self只能用在类方法中,而不能用在过程或函数中.
--这个类方法是指类里面的方法,不是以Class开头的类方法,不能用在过程和函数中,应该是指类以外定义的过程和函数,self可以理解为对象模型的首地址,如var aclass: TClass;那么可以理解为self的地址即为aclass的地址,以上为个人理解
2樓有一點說錯了。Owner和Parent可以為任意類型。通常情況下,Owner和Parent為Tobject的子類,我們創建的時候Owner會指定為Parent。
StcInGridLinePanel := TPanel.Create(Self);//此時self為owner。
StcInGridLinePanel.parent := Self;//此時self為parent.
明顯Owner就是Parent。self是指當前方法所屬的實例的指針。owner是創建這個實例的類,他可以是parent,也可以是parent的parent,反正他的范圍要大于等于parent。
Sender和Parent是沒有什么關聯的,sender通常指某個具體的控件,比如procedure dxBarButton1Click(Sender: TObject)指的是dxBarButton按鈕,而procedure FormCreate(Sender: TObject);終的sender則是Form類型的。請樓主分析清楚。
Owner:是VCL框架体系中负责对象生存期管理的一个东西。某个控件的创建和释放(父子的级联关系),由Owner来负责。
Parent:是延伸自API的东西,和控件的创建时和释放关系不大,主要负责父子控件之间的消息路由传递。
Sender:很简单,就是某个函数或过程的局部变量。表名具体是那个VCL对象实例在调用这个函数过程。因为可能很多VCL对象调用同一个函数过程,这个时候为了区别是那个调用,Sender就有用了,典型的,很多菜单MenuItem的OnClick事件可以用同一个过程。