首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

请帮助修改一段关于BINDEVENT的程序代码解决方案

2013-01-26 
请帮助修改一段关于BINDEVENT的程序代码本帖最后由 bjgslifeng 于 2012-07-21 08:32:20 编辑*以下是十三豆

请帮助修改一段关于BINDEVENT的程序代码
本帖最后由 bjgslifeng 于 2012-07-21 08:32:20 编辑 *以下是十三豆回复狐友的一段代码,非常经典。

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标签就不能用了),请大家帮我修改上面的代码,谢谢!

------解决方案--------------------



* 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

热点排行