理论问题请教 关于sender (50分)

  • 主题发起人 主题发起人 bfox
  • 开始时间 开始时间
B

bfox

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TfrmHealthFm.actEditExecute(Sender: TObject);

请问在这里SENDER 一般是什么啊,如果是按某个BUTTON触发,那SENDER是按钮还是鼠标还是button所在的form或者pannel?

如果是在create ,change,这样的的事件中触发,那sender又是什么?

从哪里能找到相关的资料啊?
 
如果是按某个BUTTON触发
是这个按钮
 
Sender代表任意继承自TObject的控件。

例如:
if Sender is TEdit then //可以检查控件是否是TEdit类。
可以使用Sender进行强制转换。但是只能转换成父类,一般用于多态。

例如:
1:if Sender is TEdit then
TEdit(Sender).Caption := '我的按钮';//隐式转换
2: if Sender is TEdit then
(Sender as TEdit).Caption := '我的按钮'//显示转换
 
就是说,谁的事件,sender就代表谁。
 
你可以在Button的Click事件中加入以下代码就知道Sender是什么了。
if Sender is TButton then
ShowMessage('Button');
if Sender is TPanel then
ShowMessage('Panel');
......
 
procedure TfrmHealthFm.actEditExecute(Sender: TObject);这很明显是个TActionList里的动作
不知道楼主是要实现什么吗?理论上面已经讲了
如果是直接引用它的一般属性就:
(Sender as TAction).Enabled:=True;
(Sender as TAction).Visible:=True;
这样就可以了
 
sender 是一个 TObject 类型的指针
因为所有的对象都是继承自 TObject (你想弄特殊的除外,vcl里是这样的)
所以 sender 就可以转化成各种派生类。
比如按扭的:
procedure form1.button1click(sender:TObject)
begin
TButton(sender).caption := 'click';//可以强制转换成TButton
end;
各种 sender 是属于什么类型不一定都一样,你想知道sender 是什么类,
可以用 sender.classname(好象是这个名字) 来查看,然后强制转换
 
你几TButton用同样的代码(在OnClick里选用)
case (Sender as TButton).Tag of
10..100:begin
//处理过程
end;//end 10_100
//其他情况
end;//end case
//是否对你有帮助SENDER啊
 
你要是彻底理解了这个sender也就理解了类的多态性,建议你看看<delphi4编程技术内幕>
 
我只是想在其他地方调用这个procedure ,
另外,主要想了解一下sender的意思
我想知道sender 到底具体是指什么实体,不仅仅要知道是tbutton,还要知道是button1还是button2:)
我想按DouZheng, 兄的解释,如果是fromcreate ,那sender就应该是这个from本身,对吧?
这个sender 在编程的时候有什么用处吗?
 
bfox,
 对。
 你知道self 有什么用吧! 与它是一样的。
不过,不能直接用,必须这样 (Sender as TEdit).Caption := '我的按钮'//
:P
 
 
要知道是哪个button,在生成BT的时候设置BT的TAG属性,使每个TAG的值不一样,这样就可以识别了
请教woyaoying: 隐式转换和显示转换有没有区别?
 
举个例子,我现在想通过代码实现 Pagecontrol的当前页面的切换,要求效果和用鼠标直接点击一样。
并且在切换时自动触发pagechange和pagechanging事件,那我的代码应该怎么写?

如果我直接写
activepage :=
那pagechange的sender 应该写什么啊?

 
一般来说sender代表触发此事件的实体,
 
你可以发鼠标左键的消息
 
pagechange和pagechanging事件的 sender不就是pagecontrol吗?
 
pagecontrol上面不是有好几个页面吗? 我想,SENDER 应该是具体的页面吧
 
zhaogh_2171兄,能说得具体点吗?
 
不好意思,人多分少,大家见谅
 
多人接受答案了。
 
后退
顶部