关于 Sender: TObject ( 积分: 5 )

  • 主题发起人 主题发起人 del_today
  • 开始时间 开始时间
D

del_today

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
1、以下语句中,“Sender: TObject”是什么意思?
procedure FormCreate(Sender: TObject);
procedure Buttons1Click(Sender: TObject);
请详细说明,谢了!
2、过程、函数本身必须有参数吗?
 
各位高手:
1、以下语句中,“Sender: TObject”是什么意思?
procedure FormCreate(Sender: TObject);
procedure Buttons1Click(Sender: TObject);
请详细说明,谢了!
2、过程、函数本身必须有参数吗?
 
无分问题、基础问题欢迎到
http://njsoft.w2.smsky.cn
(http://est.51vip.com)
提问。
 
Sender: TObject的意思是传递发生事件的组件作为对象参数,即Sender的值是响应发生事件的组件(或控件)的。
过程和函数都是方法,引起一些执行过程,不一定必须带有参数,如
procedure SayHello;
begin
showmessage('Hello!');
end;
 
TnotifyEvent为方法指针类型。
所有的带(sender:Tobject)都是由它组成的。

一个例子:
关于两个窗体的相互调用问题



设有两个窗体:form1,unit1和form2,unit2

如果form1调用form2,而form2又要调用form1的事件。

(如果两个单元相互引用,即使可以实现,但是是不可取的)。



如下:

form1上Button1用于显示form2窗体。Button2,关闭窗体。

Form2上的Button1点击后,将两个窗体都关闭(既调用form1上的Button2)。



下面是实现:

为了防止意大利面条,所以unit2单元,不引用unit1,只是在unit1中引用unit2。



在form2中声明公有属性:

property Oncancel:TnotifyEvent;

在form2上的Button1事件如下:

Procedure Tform2.Button1Click(sender:Tobject);

Begin

Foncancel(self); //此为属性OnCancel的私有变量。

End;



在form1中引用unit2单元:

两个按钮事件:

Button2Click(sender:Tobject);

Begin

Close;

End;



Button1Click(sender:Tobject);

Begin

Form2:=Form2.Create(self);

Form2.OnCancel:= Button2Click;

Form2.show; //或使用showModal;

End;
 
Sender是个Tobject类型的指针,指向触发当前事件的实例

procedure FormCreate(Sender: TObject);//这个sender是form
procedure Buttons1Click(Sender: TObject);//这个sender是button1

你看看那些控件的源码,比如:
if Assigned(FOnClick) and (Action <> nil) and (@FOnClick <>@Action.OnExecute) then FOnClick(Self)
这个就是触发onclick事件传参数为self,也就是你看到的sender
 
Sender: TObject是触发事件的对象,比如可以用它为条件控制输入等等。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
后退
顶部