急求解答:self与owner ,sender与parent的区别

解决方案 »

  1.   

    Parent属性是指构件的包容器,构件只能在此范围内显示和移动。
    Owner属性是指构件的所有者,它负责构件的创建和释放。
    Owner为创建者,Parent为容器 他们的类型不同,Owner为TComponent(元件),Parent为TWinControl(窗体控件);在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的构件;
    Self是指所编的程序范围是在哪一个类中,Delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self 指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件.
    另外应注意,self只能用在类方法中,而不能用在过程或函数中.
      

  2.   

    另外应注意,self只能用在类方法中,而不能用在过程或函数中.
    --这个类方法是指类里面的方法,不是以Class开头的类方法,不能用在过程和函数中,应该是指类以外定义的过程和函数,self可以理解为对象模型的首地址,如var aclass: TClass;那么可以理解为self的地址即为aclass的地址,以上为个人理解
      

  3.   


    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類型的。請樓主分析清楚。
      

  4.   

    建议从面向对象的角度来理解,什么Owner、Sender之类,只不过是为了满足需要而设计出来的一个参数而已。
      

  5.   

    http://blog.csdn.net/hnxxcxg/archive/2008/09/01/2862202.aspx
      

  6.   

    http://www.delphibbs.com/keylife/iblog_show.asp?xid=2104
      

  7.   

    Self,传统上是指对象的所有成员函数里面,自引用,有时候显式的用Self方式调用对象的方法和属性会让代码可读性更高。
    Owner:是VCL框架体系中负责对象生存期管理的一个东西。某个控件的创建和释放(父子的级联关系),由Owner来负责。
    Parent:是延伸自API的东西,和控件的创建时和释放关系不大,主要负责父子控件之间的消息路由传递。
    Sender:很简单,就是某个函数或过程的局部变量。表名具体是那个VCL对象实例在调用这个函数过程。因为可能很多VCL对象调用同一个函数过程,这个时候为了区别是那个调用,Sender就有用了,典型的,很多菜单MenuItem的OnClick事件可以用同一个过程。