打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
bindevent使用范例
userphoto

2024.01.06 河南

关注

列子1: 

在一个表单中有n个命令按钮,我想随便单击其中任何一个按钮,此表单关闭,进入另一个表单。 

不想一个按钮一个按钮的添加代码,而想用动态方式将对象的CLICK事件与原有或新建的事件或方法绑定。 

---------------------------------------------------------------------------------- 

可以为表单新建一个方法,比如MyMethod,然后写入诸如下面的代码: 

THISForm.Release 

DO FORM 表单名 

在表单的Init事件中加入以下代码: 

FOR i = 1 TO THIS.ControlCount 

IF UPPER(THIS.Controls[i].BaseClass) == "COMMANDBUTTON" 

= BINDEVENT(THIS.Controls[i], "Click", THIS, "MyMethod") 

ENDIF 

ENDFOR 

这样应该就可以了。但是,需要注意的是,只有VFP7以上版本才有BINDEVENT()函数。 

也完全可以把按钮做成类,然后再向表单中添加若干基于该类的按钮。 

不过如果如你所说,按钮是不可视的,那应该怎么都没用了。 

列子2: 

---------------------------------------------------------------------------------- 

动态加载一个控件,如按钮,并给按钮的Click事件绑定事件: 

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事件: 

THISFORM.ADDOBJECT('Cmd_Test','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.Cmd_Test,"Click",oHandler,"CmdClick") 

THISFORM.Cmd_Test.VISIBLE=.T. 

---------------------------------------------------------- 

例子3: 

*BINDEVENT() 函数。下面是一个简单示例。 

PUBLIC oform1 

oform1=NEWOBJECT("form1") 

oform1.SHOW 

RETURN 

DEFINE CLASS form1 AS FORM 

TOP = 24 

LEFT = 158 

DOCREATE = .T. 

CAPTION = "Bindevent 示例" 

NAME = "Form1" 

PROCEDURE _click 

THISFORM.text1.VALUE=THISFORM.ACTIVECONTROL.NAME &&此处可改为表单文件名 

ENDPROC 

PROCEDURE INIT 

LOCAL i,j,cname 

THISFORM.LOCKSCREEN=.T. 

FOR i=1 TO 3 

FOR j=1 TO 3 

cname='cmd'+STR(i,1)+STR(j,1) 

THISFORM.ADDOBJECT(cname,'commandbutton') 

WITH THISFORM.&cname. 

.LEFT=j*100-60 

.TOP=i*40 

.CAPTION='按钮 &cname.' 

.HEIGHT=25 

.WIDTH=80 

.VISIBLE=.T. 

ENDWITH 

BINDEVENT(THISFORM.&cname.,'click',THISFORM,'_CLICK') 

ENDFOR 

ENDFOR 

THISFORM.ADDOBJECT('text1','textbox') 

WITH THISFORM.text1 

.LEFT=80 

.TOP=160 

.HEIGHT=25 

.WIDTH=200 

.VISIBLE=.T. 

ENDWITH 

THISFORM.LOCKSCREEN=.F. 

ENDPROC 

ENDDEFINE 

*注意一点:Bindevent引用的代码中慎用“This”引用控件,它指向的还是原方法所在对象。如上例中,如果方法中出现“This”,则,它指的是表单,而不是按钮。 

--------------------------------------------------------------- 

例子4: 

下列代码将Visual FoxPro主窗口的MouseMove事件绑定到自定义类MyHandler的MyMouseMove方法,绑定后,当在主窗口中移动鼠标时,将显示鼠标的坐标位置。 

PUBLIC oHandler       &&注意,请将保存对象的变量设置为全局变量  

oHandler=NEWOBJECT("MyHandler") 

*!* 将_SCREEN.MouseMove绑定到oHandler.MyMouseMove 

=BINDEVENT(_SCREEN,"MouseMove",oHandler,"MyMouseMove")   

DEFINE CLASS MyHandler AS Custom    

   PROCEDURE MyMouseMove 

       *!* 要保证该方法与_SCREEN.MouseMove有同样的参数设置 

       LPARAMETERS nButton, nShift, nXCoord, nYCoord    

       WAIT WINDOW "鼠标坐标:"+STR(nXCoord)+"|"+STR(nYCoord) NOWAIT  

   ENDPROC  

ENDDEFINE 

或 

PUBLIC oHandler       &&注意,请将保存对象的变量设置为全局变量 

oHandler=NEWOBJECT("MyHandler") 

=BINDEVENT(_SCREEN,"RESIZE",oHandler,"MyRESIZE") 

=BINDEVENT(_SCREEN,"CLICK",oHandler,"MyCLICK") 

=BINDEVENT(_SCREEN,"MouseMove",oHandler,"MyMouseMove") 

DEFINE CLASS MyHandler AS CUSTOM 

PROCEDURE MyRESIZE 

? "发生了Resize事件" 

ENDPROC 

PROCEDURE MyCLICK 

? "发生了Click事件" 

ENDPROC 

PROCEDURE MyMouseMove 

LPARAMETERS nButton, nShift, nXCoord, nYCoord 

WAIT WINDOW "水平坐标:"+STR(nXCoord)+"垂直坐标:"+STR(nYCoord) NOWAIT 

ENDPROC 

ENDDEFINE 

--------------------------------------------------------------- 

注意: 

函数BINDEVENT只有VFP8.0开始才有

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VFP的_SCREEN对象属性和事件的定义
动态加载一个控件,如按钮,并给按钮的Click事件绑定事件:
TreeView控件
VFP中重复数据输入表单的制作
问题详情
文本框的应用技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服