初级问题:为什么很多的过程都加上参数Sender:TObject?(50分)

  • 主题发起人 主题发起人 liudows
  • 开始时间 开始时间
L

liudows

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么很多的过程都加上参数Sender:TObject?即使没有用到这个参数。
它到底是起什么作用的?
 
Sender一般是指调用该过程的一个方法中的参数,常用在方法指针中,一般指的是于该事件有直接关系的对象,如Button1.OnClick := AClick;
那么AClick就会有参数Sender: TObject;,这个Sender就是指的Button1,因为对象都是从TObject继承而来的,所以一般就定为TObject类型.
 
如果多个控件公用一个事件处理方法,那么在方法中是由Sender来确定此次调用是由哪个控件触发的.
"Button1.OnClick := AClick;
那么AClick就会有参数Sender: TObject;,这个Sender就是指的Button1"这样说是不太全面的.
 
还真说不清,给一段代码吧:

procedure onObjectClick(Sender:TObject);
begin
if Sender is TButton then
begin
showmessage('button');
....
end
else if Sender is TForm then
begin
showmessage('form');
....
end
.....
end;

还请高手来说清楚吧!
 
楼上的说法还行,我也就是这个意思!!
晕!!!
 
从那里见过,好像意思是说接受消息的类吧,因为不能确定是那一个类,所以用基类TObject,也不知道对不对,向这里的高手学习一下.
 
消息传递时的HWND
 
你可以自定义函数或过程中传sender的,比如:
procedure myfunc(sender : tobject);
begin
if sender is tbutton then
begin
.....
showmessage('sender is button');
end
else
begin
......
end;
end;
 
这其实是多态的用法之一,不知道说的对不,请高手指正!
 
是不是可以把Sender理解为当前活动的对象呢?
上面举的例子:
procedure onObjectClick(Sender:TObject);
begin
if Sender is TButton then
begin
showmessage('button');
....
end
else if Sender is TForm then
begin
showmessage('form');
....
end
.....
end;
都是用的Button,Form这样的组件。可不可以用自定义的对象呢?
比如写if Sender is MyObj then ......
 
当然了,但要记得is 后应是一个Class.即 if Sender is TMyObj then....
 
Sender是指触发某个事件的对象,通过转型你可以把获取这个对象的信息,这个参数主要用在那些事件共用的场合。
 
最主要的作用是实现多态,由于Tobject 是所有类的基类,所以所有的类都可以安全的向上转型为Tobject.
 
作用:任何派生自该类的类的对象都可以复值给该类的对象,有点多态的意思。
 
后退
顶部