当前位置: 代码迷 >> VFP >> 怎么动态在文本框加入,触发代码
  详细解决方案

怎么动态在文本框加入,触发代码

热度:10011   发布时间:2013-02-26 00:00:00.0
如何动态在文本框加入,触发代码
我想在文体框,运行时,右键加入以下代码  
do   test.mpr
***
加入后,效果,文体框,右键时,弹出一个菜单

------解决方案--------------------------------------------------------
请参考:

表单运行时用BINDEVENT()来绑定事件,属性或方法从VFP自己的对象到其它VFP对象

*--------------------------------

列子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 ")


  相关解决方案