sender在程序中如何应用
解决方案 »
- 我和"mwy654321"的对话?
- 怎样在delphi中调用打印对话框,来选择打印机?
- 简单问题,怎么设置DBGrid选中的某一行或选中的某一单元为只读呀?
- 请教内存操作问题,谢谢!
- listview选中时有一个蓝条,有没有办法不显示出来急。。。。。。。
- TWebModule出问题了!
- 关于全局变量的声明问题?!
- ODBC方式连接 DB2 9.1+FIX3 问题 [IBM][CLI Driver] CLI0125E 函数顺序错误。 SQLSTATE=S1010
- 时间问题?
- 关于读取文件
- 各位大虾,我想用delphi产生一个10位的随机密码,密码中有英文也有中文,我忘记用什么函数?
- 急问,关于文件的问题
在程序中经过转换后同该对象相同。
if Sender = Button1 then
AboutBox.Caption := 'About ' + Application.Title
else
AboutBox.Caption := '';
AboutBox.ShowModal;
end;
这句话什么意思。我不明白的,能不能说的详细一点谢谢
那么form的event是否都可以使用sender!!!
我觉得就是本身,我没仔细想过,应该和C++的this差不多吧!
------------------------------------
不对,那是self,不过self好像不是指针
的意思就是事件触发者是不是Button1
我是初学者,请大家多多关照
Form1.OnClick(Button1);
这个时候在Form1的OnClick事件中对Sender进行判断就是Button1,而不是Form1了!需要注意的是,由于Sender的类型为TObject,因此实际使用的时候最好进行类型转换!!!!使用As运算符!!!!**********************************************************************************另外,你问Sender和Event是否可以等同:个人认为,虽然都是指针,但具体代表的事物不同!如果你要强制转换,我没有试验过!!!!只要对存储空间要求一致,应该可以转换,但最好不要简单的等同!!!!
procedure TForm1.Form1Click(Sender:TObject);
同时在实现部分创建上述过程的框架,如下:
procedure TForm1.Form1Click(Sender:TObject);
begin
//初始情况下,这里并没有任何代码!
end;
然后我们在程序中可以调用这个建立好的方法,例如我们在窗体上的Button1的OnClick方法中执行如下代码:
...
Self.Form1Click(Button1);
...
同时,我们假设在Form1Click中代码如下:
...
if Sender=Button1 then
ShowMessage(TButton(Sender).Caption); //这里在判断条件为真的情况下使用强制转换
...
可以看到在代用Form1Click时,为其传递的Sender参数可以自己定义,因此严格来讲Sender参数并不代表真正触发此事件对应方法的对象,确切的说应该是用户指定的触发此事件对应方法的对象!
//“事件的触发者”,或者说“这个外挂的事件处理函数的调用者”,目的是为了让事件处理函数有一个参考
//尤其是当一个事件处理函数挂接到多个实例时。//看个例子
procedure THappy.MakeLove;
var
bCancel :Boolean;
bNeedBath :Boolean;
bHappy :Boolean;
begin
bCancel := False;
bNeedBath := True; if assigned(FOnBeforeMakeLove) then
FOnBeforeMakeLove(Self, bNeedBath, bCancel); if bCancel then Exit;
if bNeedBath then GotoBath; bHappy := DoMakeLove(Self.Boy, Self.Girl); if assigned(FOnAfterMakeLove) then
FOnAfterMakeLove(Self, bHappy);
end;procedure XXXBeforeMakeLove(Sender :TObject; var ANeedBath, ACancel :Boolean);
begin
if Sender is THappy then begin
if (THappy(Sender).Boy <> me) or (THappy(Sender).Girl.Age < 16)
or (THappy(Sender).Girl.Age > 25) then
begin
ACancel := True;
end;
ANeedBath := OfCourseTrue;
end;
end;procedure XXXAfterMakeLove(Sender :TObject; const AHappy :Boolean);
begin
if AHappy then
begin
ShowMessage('爽歪歪...');
end
else begin
ShowMessage('555...');
end;
end;-------
我记得在csdn的文档中心(其实很早前我在其他地方看过)有讲sender,self等联系和区别的文章,你可以看看。