参数sender与self的区别与用法?(100分)

  • 主题发起人 chinesetree
  • 开始时间
C

chinesetree

Unregistered / Unconfirmed
GUEST, unregistred user!
参数sender与self的区别与用法?最好有例子说明
 
Sender是作为参数TObject对象,Self表示当前的默认对象
 
Self是类对象的默认参数,只有在类对象方法中才有。
Sender只是一个参数,和普通的参数没有什么区别。只是类对象常用它来表示是谁激发了
该事件。
 
如,在事件:
procedure Tform1.button1click(sender : Tobject);
begin
{self在此事件中代表着的是Form1,而sender 指的是button1}
end;
如果button2的onclick事件也指定为button1click
那么,在程序执行过程中,单击button2的时候sender就是button2
 
Sender 一般表明出发此事件的对象,指针类型为 TObject;
Self 指向调用当前此成员函数的对象,指针类型就为这个对象的实际类型.
 
Sender是当前事件的触发者是个对象
Self是当前方法所属于的对象,声明是默认的
例如
procedure TXXX.proc;
begin
self.name:='';///注意Self就是TXXX的当前实例.
end;

有一个事件TXXX.OnClick(Sender:TObject);
如果我们在调用时XXX.OnClick(Button1);难么触发者就是Button1
 
  在事件处理程序参数表中,至少含有一个参数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;
 
谢谢大家解决了我学习中的问题
以后有问题请多多指教~
 
顶部