当前位置: 代码迷 >> VFP >> 请相助修改一段关于BINDEVENT的程序代码
  详细解决方案

请相助修改一段关于BINDEVENT的程序代码

热度:1221   发布时间:2013-02-26 00:00:00.0
请帮助修改一段关于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标签就不能用了),请大家帮我修改上面的代码,谢谢!


------解决方案--------------------------------------------------------
SQL code
* vfp9.0Public oform1oform1=Newobject("form1")oform1.ShowReturnDefine 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.    EndprocEnddefine
  相关解决方案