用addobject建立多个控件,使用Bindevent()实现click功能,但只能点击最后一个控件,请高手帮助解决

lnaszxl 2012-09-27 02:35:12
参考
http://topic.csdn.net/u/20090613/13/83608534-8255-4B4C-ABEF-2EE7D55E9469.html

使用 Bindevent(Thisform.Cmd_Test,"Click",oHandler,"CmdClick")

用addobject建立多个控件,使用Bindevent()实现click功能,但只能点击最后一个控件,请高手帮助解决

如何实现对多个控件都可以点击?
...全文
279 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lnaszxl 2012-09-30
  • 打赏
  • 举报
回复
感谢!基本解决!谢谢十豆三!
十豆三 2012-09-29
  • 打赏
  • 举报
回复
Messagebox('ok',64,'') &&此处改为你的相应代码
改为
MESSAGEBOX('您单击的是按钮:'+Testa.ACTIVECONTROL.NAME,64,'')

运行你的表单时:
Public Testa
Do Form 你的表单文件名.Scx Name Testa

另外最好用 用表单自定义方法或用隐藏的按钮Click事件代替 MyProc.PRG
十豆三 2012-09-28
  • 打赏
  • 举报
回复
帖出你的完整实际代码
lnaszxl 2012-09-28
  • 打赏
  • 举报
回复
建立了十多个按钮,结果只有最后一个按钮,点击后有反应,其它的都没有
lnaszxl 2012-09-28
  • 打赏
  • 举报
回复
1、建一个过程文件(如MyProc.PRG),内容如下
Define Class myhandler As Session
Procedure CmdClick
Messagebox('ok',64,'') &&此处改为你的相应代码
Return
Endproc
Enddefine

2、表单的INIT事件:

Set Procedure To MyProc.prg


3、表单上动态加载控件按钮的CLICK事件:
rrr=1
imm='im'+allt(STR(rrr))


with Thisform.AddObject(imm,'CommandButton')
Thisform.Cmd_Test.Caption='Cmd_Test'
Thisform.Cmd_Test.Top=100
Thisform.Cmd_Test.Left=100
Thisform.Cmd_Test.Height=25
Public oHandler
oHandler=Newobject("myhandler")
Bindevent(Thisform.&imm.,"Click",oHandler,"CmdClick")
Thisform.Cmd_Test.Visible=.T.

ENDWITH
rrr=rrr+1
lnaszxl 2012-09-28
  • 打赏
  • 举报
回复
因为
Bindevent(Thisform.&imm.,"Click",oHandler,"CmdClick")

IM1这个按钮绑的是
Define Class myhandler As Session

IM10绑的也是这个
能动态的吗?
例如,点击IM1按钮,
Messagebox(imm)
能显示IM1

点击IM10 就显示IM10
lnaszxl 2012-09-28
  • 打赏
  • 举报
回复
高手高手高高手。。。代码写的简单明了,很强大!
谢谢十豆三!!
再麻烦一下
如果想不一样,就写多个 Define Class myhandler As Session

这个怎么写?
十豆三 2012-09-28
  • 打赏
  • 举报
回复
我要你的完全代码,就是要你的这段代码。
3,在表单上建个按钮
。。。。。。

你把你的这段代码改用我楼上的代码试试
十豆三 2012-09-28
  • 打赏
  • 举报
回复
Public oHandler
oHandler=Newobject("myhandler")

rrr=1
d1=10
d2=10

For lnI=1 To 10
imm='im'+Transform(lnI)
With Thisform
.AddObject(imm,'CommandButton')
.&imm..Width=19
.&imm..Height=19
.&imm..Left=D1
.&imm..Top=D2
.&imm..Visible = .T.
Bindevent(Thisform.&imm.,"Click",oHandler,"CmdClick")
Endwith
D1=D1+20
D2=D2+20
EndFor
这样是每个按钮的事件是一样的,想不一样,就写多个 Define Class myhandler As Session
我这只是为了实现例子而写的Define Class myhandler As Session,其实完全可以用表单自定义方法或用隐藏的按钮Click事件代替 MyProc.PRG
lnaszxl 2012-09-28
  • 打赏
  • 举报
回复
1、建一个过程文件(如MyProc.PRG),内容如下
Define Class myhandler As Session
Procedure CmdClick
Messagebox('ok',64,'') &&此处改为你的相应代码
Return
Endproc
Enddefine

2、表单的INIT事件:

Set Procedure To MyProc.prg


3,在表单上建个按钮

rrr=1
d1=10
d2=10


DO whil.t.


imm='im'+allt(STR(rrr))



with Thisform
.AddObject(imm,'CommandButton')
.&imm..width=19
.&imm..height=19
.&imm..left=D1
.&imm..top=D2
.&imm..visible = .t.

Public oHandler
oHandler=Newobject("myhandler")
Bindevent(Thisform.&imm.,"Click",oHandler,"CmdClick")


ENDWITH

RRR=RRR+1
D1=D1+20
D2=D2+20

if RRR>11
retu
ENDIF

enddo
lnaszxl 2012-09-28
  • 打赏
  • 举报
回复
相当于,动态产生了,IM1,IM2...IM10等 10个按钮
结果只有IM10点击后,出现那个OK的提示框。。

希望点击IM1...IM10,都有不同的提示
lnaszxl 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
帖出你的完整实际代码
[/Quote]

大哥,这就是完整的代码啊,完合按照您老的的贴子做的,绝对可以实现的,但只实现一个
lygcw9602 2012-09-27
  • 打赏
  • 举报
回复
贴上你的代码

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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