大家聊一聊(Sender:TObject)的作用(Very Esay)(50分)

  • 主题发起人 主题发起人 wuheedm
  • 开始时间 开始时间
W

wuheedm

Unregistered / Unconfirmed
GUEST, unregistred user!
基本上每个事件的后面都有(Sender:TObject),而我自己定义的过程有没有必要加上(Sender
:TObject)?
Sender是个什么参数?究竟有什么作用?请举例子?
 
sender 告诉用户当前谁在调用这个过程,应该是对象或类。
The Sender parameter in an event handler informs Delphi which component
received the event, and therefore called the handler. You can write a
single event handler that responds to multiple component events by using
the Sender parameter in an if..then..else statement.

帮助里有例子啊。
procedure TMain1.Button1Click(Sender: TObject);
begin
if Sender = Button1 then
AboutBox.Caption := 'About ' + Application.Title
else AboutBox.Caption := '';
AboutBox.ShowModal;
end;
 
又来晚了。
不过可以告诉你,自定义的过程是没必要加这个参数的。
 
这个参数主要是用来告诉被调用者是谁在调用它.
就象有人叫你, 你总是立即知道谁在叫你, 不过大部分情况下, 不管谁叫, 都一样干活
 
都一样干活的话,那么在代码中就不能采用这个参数了.
Sender是指事件的发起源.比如在TEDIT控件中的ONCHANG事件中,send就是指这个TEDIT控件.
我有一个问题:
我经常使用这种代码:TEDIT(Sender).XXXX.要求在这个SENDER一定是原来事件的发起者

可是我在别人的代码中看到这样的情况.他在一个TCOMBOBOX的事件的ONCHANGE事件中有以下代码
edit1onchange(sender);
edit1onchange是指EDIT1的ONCHANGE事件处理函数.这样的话,SENDER就是
TCOMBOBOX类型了.我就想问问倒底这种写法是否合理?
 
省代码,可共用代码句柄
 
vcl是采用委托模式(delegation)来处理消息,如MyClass.Method1(Sender:TObject);
其中MyClass是委托人,Sender是被委托人,明白吗?.
 
好用好用,,可以公用同一处理,有可以根据sender 来分别对待,
尤其是和 Tag 一起用的时候,爽啊。
 
多人接受答案了。
 
后退
顶部