在控件的Create方法中用Create(Self)。这里的Self相当于创建这个控件的拥用者即Owner 。而在控件的事件中一般有参数Sender,表示这个事件是哪个控件触发的。比如有好几个Button共用一个Click事件,那么用Sender.tag可区分是哪个按钮,当然事先需为每个Button设置tag属性

解决方案 »

  1.   

    在事件处理程序参数表中,至少含有一个参数sender,它代表触发事件处理程序的构件,如在上例中,sender就指button2,有了sender参数,可以使多个构件共用相同的事件处理程序,如下例:  procedure tform1.buttonclick(sender:tobject);
      begin
      if sender=button1 then
      label1.caption:=′看庭前花开花落′  else label2.caption:=′望天上云卷云舒′
      end;  在此例中,button1,button2共用了buttonclick事件处理程序。  self是指所编的程序范围是在哪一个类中,delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件,如在第一个例子中,self代表tform1。另外应注意,self只能用在类方法中,而不能用在过程或函数中,如下例用法是错的:function a1(b:integer):integer;
      begin
      ……
      button:=tbutton.create(self);……
      end;  
      

  2.   

    self就象c++和java中的this, 代表这个类的实例本身,
    比如在TForm1.Button1Click()中用self 的话就代表这个Form1本身,
    还有在组件构造函数中用self的话代表这个组件的owner为self.
    sender一般用在事件句柄中,代表触发这个消息的控件