请高手讲一下self.BitBtn1.Click与self.BitBtn1Click()的相同与不同

babydog01 2011-06-24 03:20:46

self.BitBtn1.Click;
self.BitBtn1Click();

请高手讲一下self.BitBtn1.Click与self.BitBtn1Click()的相同与不同,使用中应注意哪些问题?
...全文
212 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
babydog01 2011-06-26
  • 打赏
  • 举报
回复
呵呵,原来是姐妹啊...........
madyak 2011-06-25
  • 打赏
  • 举报
回复
不好意思#9楼写错了,别误导了。那些对TAction还可以,不适用于按钮
madyak 2011-06-25
  • 打赏
  • 举报
回复
self.BitBtn1.Click;
self.BitBtn1Click();
假定者是对应关系。
一个比较明白显不同的,调用self.BitBtn1Click()时,肯定是执行了这个方法
但调用self.BitBtn1.Click时,并不一定执行了self.BitBtn1Click方法,它依赖于BitBtn1.Enabled的状态,BitBtn1.Enabled为False时,执行self.BitBtn1.Click;相当于没什么也没有做。

babydog01 2011-06-25
  • 打赏
  • 举报
回复
这是网上查的,照这种说法
BtnBitClick(Sender :TObject)
这里的sender是一个只读的返回值,它返回的是哪个Tobject调用了本过程。
babydog01 2011-06-25
  • 打赏
  • 举报
回复
sender就是调用者,在delphi中你可以将一个按钮的事件过程赋给多个按钮,也就是说一个过程可以响应多个控件的单击过程。你可以根据sender的不同执行不同的操作。

Sender是一个TObject类型的参数,它告诉Delphi哪个控件接收这个事件并调用相应的处理过程。你可以编写一个单一的事件处理句柄,通过Sender参数和IF…THEN…语句或者CASE语句配合,来处理多个构件。发生事件的构件或控件的值已经赋给了Sender参数,该参数的用途之一就在于:可以使用保留字IS来测试Sender,以便找到调用这个事件处理句柄的构件或控件的类型。例如,将表单中编辑框和标签的Click事件的处理句柄都指向表单的xxx过程,编辑框和标签对Click事件有不同的反应:
procedure TForm1xxx(Sender:TObject);
begin
if(sender is Tedit) then
showmessage(′this is a editbox′);
if(sender is Tlabel) then
showmessage(′this is a label′);
end;
Sender参数的第二个用途是结合AS操作符进行类型转换,将若干个派生于某一父类的子类强制转换成该父类。例如表单中有一个TEdit类控件和一个TMemo控件,它们实际上都派生于TcustomEdit类,如果你要为二者的某一事件提供同样处理,可以将二者事件句柄都指向自定义的过程 yyy:
Procedure TForm1.yyy(Sender:TObject);
begin
(sender as TcustomEdit).text:=′This is some demo text′;
end;
在过程中,AS操作符将TEdit类和TMemo类均强制转换成TcustomEdit类,再对TcustomEdit类的属性赋值。注意这种转换必须符合Delphi中类的层次关系。
使用Sender参数可以通过单一过程段处理多类控件,真正体现了Delphi面向对象的重用性
kerrababy 2011-06-25
  • 打赏
  • 举报
回复
不好意思,没看清,
不是兄弟,是姐妹.
你的bitbtn1click指向的是bitbtn1的click就没区别了.
babydog01 2011-06-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 kerrababy 的回复:]
Object Pascal中一个鲜为人知的特性是,当调用一个过程或是函数时,如果被调用的过程和函数没有参数,圆弧括号是可以省略的。
Form1.show;
Form1.show();
意思是一样的,两种写法都是合法的。
[/Quote]

兄弟,你说的是正确的。你没有仔细审题,我说的是
self.BitBtn1.Click;
self.BitBtn1Click();
kerrababy 2011-06-25
  • 打赏
  • 举报
回复
Object Pascal中一个鲜为人知的特性是,当调用一个过程或是函数时,如果被调用的过程和函数没有参数,圆弧括号是可以省略的。
Form1.show;
Form1.show();
意思是一样的,两种写法都是合法的。
babydog01 2011-06-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 madyak 的回复:]
它依赖于BitBtn1.Enabled的状态,BitBtn1.Enabled为False时,执行self.BitBtn1.Click;相当于没什么也没有做。

[/Quote]
我懂的
即使BitBtn1,enabled=false,visible=false 执行self.BitBtn1.Click也会照常执行的。

蓝色光芒 2011-06-24
  • 打赏
  • 举报
回复

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Click;
Button1.OnClick := Button2Click;
Button1.Click;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.MessageBox('Button1Click' , '提示' , MB_OK);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Application.MessageBox('Button2Click' , '提示' , MB_OK);
end;
npkaida 2011-06-24
  • 打赏
  • 举报
回复
self.BitBtn1.Click 等同于 self.BitBtn1Click(nil)
babydog01 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cai5 的回复:]
3、如果BitBtn1的OnClick绑定的是BtnBitClick(Sender :TObject)的话;
那么这两种调用实现的是一样的作用

注:BtnBitClick(Sender :TObject) :注意其中如果使用Sender的话就不好说了 ;
[/Quote]

通过您的讲解,明白了一些,能否再详细讲一下BtnBitClick(Sender :TObject)。
五哥 2011-06-24
  • 打赏
  • 举报
回复
3、如果BitBtn1的OnClick绑定的是BtnBitClick(Sender :TObject)的话;
那么这两种调用实现的是一样的作用

注:BtnBitClick(Sender :TObject) :注意其中如果使用Sender的话就不好说了 ;
五哥 2011-06-24
  • 打赏
  • 举报
回复
1、
self.BitBtn1.Click --调用的窗体中的BitBtn1的click过程 -
self.BitBtn1Click() --调用的窗体的BitBtn1Click过程 ;

2、
self.BitBtn1.Click 应该是模拟按钮点击 ;没有参数
self.BitBtn1Click()这个应该是纯粹的调用一个过程 ; 有参数,可以传一个nil进来也可以是具体的TObject


理解的可能不对啊,仅供参考 !

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧