在表单如何用代码新增一个方法或属性?
如何在表单的init或load方法内写入代码,通过代码向表单新增一个临时方法或属性,此表单关闭后不保存此方法或属性,同时通过代码增加完临时方法或属性后,如何给新增的临时方法加入代码或设置属性值?
比如我用代码新增了一个label控件,如何给这个控件注入click事件?
this.AddObject('label1','label')
WITH this
.label1.visible=.t.
.label1.caption='自动加载项目1'
.label1.top=50
.label1.backstyle=0
.label1.autosize=.t.
ENDWITH
用BINDEVENT来绑定可以行得通,但因为我要求随机生成的label个数较多,
在表中有 标签caption名、标签name名、代码字段,
记录内容为 随机标签1 label1 do form xx.scx
我想在一个表单内根据表中记录随机生成N个label控件,并给每个label控件的click定义事件代码,click事件有规律性,都是do form xx.scx类的代码。这样能实现码?
问题点数:5、回复次数:1Top
1 楼apple_8180(十豆三)回复于 2006-03-04 08:48:39 得分 0
请参考:
表单运行时用BINDEVENT()来绑定事件,属性或方法从VFP自己的对象到其它VFP对象
*--------------------------------
以下为一个列子:
在一个表单中有n个命令按钮,我想随便单击其中任何一个按钮,此表单关闭,进入另一个表单。
不想一个按钮一个按钮的添加代码,而想用动态方式将对象的CLICK事件与原有或新建的事件或方法绑定。
----------------------------------------------------------------------------------
可以为表单新建一个方法,比如NewMethod,然后写入诸如下面的代码:
THISForm.Release
DO FORM 表单名
在表单的Init事件中加入以下代码:
FOR i = 1 TO THIS.ControlCount
IF UPPER(THIS.Controls[i].BaseClass) == "COMMANDBUTTON"
= BINDEVENT(THIS.Controls[i], "Click", THIS, "NewMethod")
ENDIF
ENDFOR
这样应该就可以了。但是,需要注意的是,只有VFP8及以上版本才有BINDEVENT()函数。
也完全可以把按钮做成类,然后再向表单中添加若干基于该类的按钮。
不过如果如你所说,按钮是不可视的,那应该怎么都没用了。
----------------------------------------------------------------------------------
动态加载一个控件,如Grid,并给Grid的Text1的RightClick事件绑定事件:
1、建一个过程文件(如MyProc.PRG),内容如下
DEFINE CLASS myhandler AS Session
PROCEDURE MyRightClick
MESSAGEBOX('ok',64,'') &&此处改为相应代码
RETURN
ENDPROC
ENDDEFINE
2、表单的INIT事件:
SET PROCEDURE TO MyProc.prg
3、表单上动态加载控件(这里是Grid)按钮的CLICK事件:
THISFORM.ADDOBJECT('Grid1','Grid')
THISFORM.Grid1.RECORDSOURCE='表名'
THISFORM.Grid1.TOP=100
THISFORM.Grid1.LEFT=100
PUBLIC oHandler
oHandler=NEWOBJECT("myhandler")
BINDEVENT(THISFORM.Grid1.Column1.Text1,"RightClick",oHandler,"MyRightClick")
THISFORM.Grid1.VISIBLE=.T.
Top




