请相助修改一段关于BINDEVENT的程序代码
请帮助修改一段关于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”,则,它指的是表单,而不是按钮。
*****
上面的代码,实现了单击command按钮时,文本框text1显示该表单活动控件的名字name。
我想要的效果是:不单击command按钮,当鼠标移动到某个command上时,文本框text1就显示该控件的名字name。我只知道使用MouseMove 和MouseLeave,但尝试了半天,还是无法成功。如何取得鼠标所在控件的name,是个很关键的问题(不能用模拟鼠标单击的方法,因为如果将command按钮换成lable标签就不能用了),请大家帮我修改上面的代码,谢谢!
------解决方案--------------------
*以下是十三豆回复狐友的一段代码,非常经典。
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”,则,它指的是表单,而不是按钮。
*****
上面的代码,实现了单击command按钮时,文本框text1显示该表单活动控件的名字name。
我想要的效果是:不单击command按钮,当鼠标移动到某个command上时,文本框text1就显示该控件的名字name。我只知道使用MouseMove 和MouseLeave,但尝试了半天,还是无法成功。如何取得鼠标所在控件的name,是个很关键的问题(不能用模拟鼠标单击的方法,因为如果将command按钮换成lable标签就不能用了),请大家帮我修改上面的代码,谢谢!
------解决方案--------------------
- SQL code
* vfp9.0 Public oform1 oform1=Newobject("form1") oform1.Show Return Define Class form1 As Form Top = 24 Left = 158 DoCreate = .T. Caption = "Bindevent 示例" Name = "Form1" Procedure MyMouseEnter Lparameters nButton, nShift, nXCoord, nYCoord Release aMyMouse If Amouseobj(aMyMouse)>0 Thisform.Text1.Value=aMyMouse(1).Name Endif Endproc Procedure MyMouseLeave Lparameters nButton, nShift, nXCoord, nYCoord Thisform.Text1.Value='' 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.,'MouseEnter',Thisform,'MyMouseEnter') =Bindevent(Thisform.&cname.,'MouseLeave',Thisform,'MyMouseLeave') 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