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

怎么在表单运行的时候添加控件

2012-08-25 
如何在表单运行的时候添加控件例如在表单上添加一个command1按钮“添加”,当触发click事件时,在表单原comman

如何在表单运行的时候添加控件
例如在表单上添加一个command1按钮“添加”,当触发click事件时,在表单原command1的位置出现一个textbox控件,“添加”按钮向后移。textbox控件可以正常使用

[解决办法]
运行时,在容器对象中添加对象。
Object.AddObject(cName, cClass [, cOLEClass] [, aInit1, aInit2 ...])
参数
cName 
指定引用新对象的名称。 
cClass 
指定添加对象所在的类。 
cOLEClass 
指定添加对象的 OLE 类。 
注意 如果准备分发添加了要求许可键的 ActiveX 控件(例如, Microsoft Treeview 和 Listview 控件)的运行时应用程序, 不要用 AddObject(.....cOLEClass) 方法。代替以创建并保存一个你的 ActiveX 控件子类到一个 VCX 类库中。然后, 在运行时可以用 AddObject (或 NewObject) 方法来添加该包含你的控件的 OleControl 类。
aInit1, aInit2 
指定传给新对象的 Init 事件的参数。 
备注
调用 ADDOBJECT 方法时,将触发新添加对象的 Init 事件。在表单集中加入表单时,Load 事件在 Init 事件之前发生。
Note 当用 ADDOBJECT 方法往容器中加入对象时,对象的 Visible 属性设置为“假”(.F.)。因此您可以设置对象的属性,而不看更改对象外观时的一些中间效果。
如果动态地用 AddObject() 方法来添加一个 ActiveX 控件到表单, 如果控件要求特定的许可注册键而该注册键在目标机器上不可用的话, 则你的已分发应用程序会失败。许多 ActiveX 控件销售商要求这样的注册键来在设计时用 AddObject() 方法来管理这些控件。要避免该许可要求, 首先派生一个 ActiveX 控件到类库文件 (.vcx) 中, 然后在运行时动态地用 AddObject() 来添加一个子类的实例。可以总是注意你计划随同你的程序分发的 ActiveX 控件的销售商因为可能有其它你需要包含的独立的文件。
示例
下面的示例介绍怎样使用 addobject 方法将对象或控件添加到表单中。此例用 addobject 方法往表单中加入一个 line 控件和三个命令按钮。
line 控件和命令按钮的 visible 属性设置为“真”(.t.)。在默认情况下,将对象或控件添加到表单后,它们是不可见的。
frmMyForm = CREATEOBJECT('Form') && 创建一个表单
frmMyForm.Closable = .F. && 禁止控件菜单

frmMyForm.AddObject('shpLine','Line') && 添加一个 Line 控件 到表单
frmMyForm.AddObject('cmdCmndBtn1','cmdMyCmndBtn1') && Up 命令按钮
frmMyForm.AddObject('cmdCmndBtn2','cmdMyCmndBtn2') && Down 命令按钮
frmMyForm.AddObject('cmdCmndBtn3','cmdMyCmndBtn3') && Quit 命令按钮

frmMyForm.shpLine.Visible = .T. && 让 Line 控件可见
frmMyForm.shpLine.Top = 20 && 指定 Line 控件行
frmMyForm.shpLine.Left = 125 && 指定 Line 控件列

frmMyForm.cmdCmndBtn1.Visible =.T. && Up 命令按钮可见
frmMyForm.cmdCmndBtn2.Visible =.T. && Down 命令按钮可见
frmMyForm.cmdCmndBtn3.Visible =.T. && quit 命令按钮可见

frmMyForm.SHOW && 显示表单
READ EVENTS && 启动事件处理

DEFINE CLASS cmdMyCmndBtn1 AS COMMANDBUTTON && 创建命令按钮
Caption = 'Slant \<Up' && 命令按钮标题
Left = 50 && 命令按钮列
Top = 100 && 命令按钮行
Height = 25 && 命令按钮高
 
PROCEDURE Click
ThisForm.shpLine.Visible = .F. && 隐藏 Line 控件
ThisForm.shpLine.LineSlant ='/' && Slant up
ThisForm.shpLine.Visible = .T. && 显示 Line 控件
ENDDEFINE

DEFINE CLASS cmdMyCmndBtn2 AS CommandButton && 创建命令按钮
Caption = 'Slant \<Down' && 命令按钮标题
Left = 200 && 命令按钮列
Top = 100 && 命令按钮行
Height = 25 && 命令按钮高

PROCEDURE Click
ThisForm.shpLine.Visible = .F. && 隐藏 Line 控件
ThisForm.shpLine.LineSlant ='\' && Slant down
ThisForm.shpLine.Visible = .T. && 显示 Line 控件
ENDDEFINE

DEFINE CLASS cmdMyCmndBtn3 AS CommandButton && 创建命令按钮
Caption = '\<Quit' && 命令按钮标题
Cancel= .T. && 默认取消命令按钮
Left = 125 && 命令按钮列
Top = 150 && 命令按钮行
Height = 25 && 命令按钮高

PROCEDURE Click
CLEAR EVENTS && 停止事件处理, 关闭表单
ENDDEFINE

[解决办法]

SQL code
你的 Command1 按钮的 Click 事件代码:If Vartype(Thisform.Text100)<>'O'    Thisform.AddObject('Text100','TextBox')    Thisform.Text100.Move(This.Left,This.Top,This.Width,This.Height)    This.Move(This.Left+This.Width)    Thisform.Text100.Visible=.T.Endif
------解决方案--------------------


1、建一个过程文件(如MyProc.PRG),内容如下
DEFINE CLASS myhandler AS SESSION
PROCEDURE proEvent &&proEven执行事件
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,"proEvent")
THISFORM.Cmd_Test.VISIBLE=.T.

热点排行