Sender--意义:指本对象。Sender在什么对象相关代码里,那么Sender就是什么。
Self--意义:指本类,也就是Self被引用的类。Form1内的所有对象都是Form1的类成员,所以他们的self都是Form1。
Owner--意义:指对象的所有者,在Form1内的所有对象的所有者都是Form1。
Parent--意义:指构件的包容器,此对象包括在哪个对象那里?书上和网上的描述我是明白,但是例如:
一个窗体内有一个Button1,我们要在Button1的OnClick中得到Form1的Caption
此时:
Button1 的 Sender、self、Owner、Parent 都是 Form1,其中,self可以直接这样引用:ShowMessage(Self.Caption);      //相当于Form1.Caption而Sender、Owner、Parent却要这样引用:ShowMessage(TButton(Sender).Caption)  //同样是相当于Form1.Caption这就证明了 Self 和 Sender、Owner、Parent 这三者性质是不同的。
我想知道的是,他们到底都是一个什么类型的东西(对象?类?属性?变量?)

解决方案 »

  1.   

    sender不一定是本对象
    self是本对象
    owner指拥有者。owner销毁时会自动销毁它拥有的组件。
    窗体里的对象的拥有者未必都是该窗体。
    parent的说法正确。
      

  2.   

    你们回答的都不是我想要的答案啊,麻烦高手们看清楚问题好吗?我不是在问它们指的是什么,而问他们到底是一个什么类型的东西。
    为何Self可以直接Self.Name这种方式引用,而Sender就得TButton(Sender).Name?它们在实质上有什么区别(这里的区别不是指它们是指向哪一个对象)重新逐个试了一下,发现我有两个地方是描述错误的.
    1、在Button1的OnClick里,Sender指的就是Button1而非Form1.
    2、只有Sender可以用TButton(Sender).Caption这种方法来调用,而Owner和Parent不行,会出错。
    那就引发了新的问题:
    如何引用Owner和Parent?例如,Button1的Owner和Parent都是Form1,我要用引用方式获得Form1.Name并且用ShowMessage显示出来。
      

  3.   

    你又答非所问了,既然都是指向对象的实例指针
    self可以直接用Self.caption的方式来引用Form1.caption,
    那Owner为什么就不行?
      

  4.   

    Tform(button1.owner).caption应该可以。owner是tcomponent类型的,木有caption属性。如果还不明白的话,就先去看类的继承方面的知识。
      

  5.   

    你的控件的Owner有可能是Form,也有可能是ListBox,Edit,而当控件的Owner是Form时它有Caption属性,而为Edit时,则没有Catpion属性。Owner是不确定具体控件类型的,SO^必需进行类型转换才行!