|
[转贴]程序定义类的运用
|
|
来源: 作者: 发布时间:1970-01-01
|
|
程序定义类的运用(一) 第一讲:类的定义 用户除了可以在“类设计器”或“表单设计器”中可视地定义类,也可以在.prg文件中以编程方式定义类或子类,并且定义其属性、方法、事件。 用户定义类如同一个过程程序,是将一组命令放在一个程序文件里。它的命令是基于类或子类定义来定义类或子类的属性、事件和方法的。 在类定义.prg程序里,常规命令只能包含于类定义的方法和事件里。 1、语法: DEFINE CLASS ClassName1 AS ParentClass [OLEPUBLIC] &&① [[PROTECTED | HIDDEN PropertyName1, PropertyName2 ...] &&② [Object.]PropertyName = eExpression ...] [ADD OBJECT [PROTECTED] ObjectName AS ClassName2 [NOINIT]&&③ [WITH cPropertylist]]... &&④ [[PROTECTED | HIDDEN] FUNCTION | PROCEDURE Name[_ACCESS | _ASSIGN]&&⑤ | HIS_TACCESS [NODEFAULT] cStatements&&⑥ [ENDFUNC | ENDPROC]]... ENDDEFINE 2、说明:④ 参数,说明 ① ClassName1,指定创建类的名称。 AS ParentClass,指定创建类的基类,可以是vf的一个基类(如form、CommandButton类),也可以是已经存在的一个用户定义的类。 OLEPUBLIC,指定一个能通过用户访问的在Automation服务器的类 ② PROTECTED,将属性设置为保护类型,可以防止用户在类的外部访问和改变属性的值,它只能被该类定义内的方法程序或该类的子类所访问。 HIDDEN,将属性设置为“隐藏”类型,只能被该类的定义内成员所访问,该类的子类无法“看到”或引用它们。同样,用户也不能访问和修改此类属性。 [Object.]PropertyName = eExpression 创建一个类或子类属性并且指派一个值。其属性是命名类属性,给类定义特征和行为的。类或子类可以具有多个属性。 ③ ADD OBJECT,增加一个来自于基类、用户定义类、子类或ActiveX定制控件的对象到类或子类。当然,你也可以在类的Load、Init和其他方法程序中使用CREATEOBJECT()函数创建对象。 PROTECTED,防止从该类或其子类外部定义访问和改变对象的属性。该关键字必须放置于对象名称(ObjectName)之前。 ObjectName,指定对象的名称,便于对象创建后在类或子类定义中调用。 AS ClassName2,指定创建对象的父类。 NOINIT,指定添加对象时,不执行对象的初始方法。 ④WITH cPropertyList,指定添加到类或子类的对象的属性和属性的值。 ⑤FUNCTION | PROCEDURE Name.....ENDFUNC | ENDPROC....,在类定义中通过创建过程或函数缶类中添加方法程序。function与endfunc,procedure与endproc是对应出现的,它们不能象其他关键字一样缩写。 在可执行自定义事件或方法程序内的可执行的第一行,可包含PARAMETERS 或 LPARAMETERS来接收外部实参。 注意:每个类都可识别固定的默认事件集合,最小事件集包括Init、Destroy和Error事件;若类中创建的方法程序与某个类所能识别的事件重名,则当该事件发生时,同名方法程序被执行。 _ACCESS | _ASSIGN,通过创建与类的某一属性同名的过程或函数,然后在过程或函数名后面追加这两个参数,可以为类创建Access和Assign方法程序。Access,当你访问与Access方法程序同名属性时执行;Assign,当你试图改变与Assign方法程序同名属性的值时执行。 NODEFAULT,防止父类中的方法或事件发生。它可以放在包括表单在内的任何对象的任何事件的任何位置。 ⑥cStatements,当一个方法或事件执行时,执行的vf命令。 3、范例: DEFINE CLASS MyForm AS Form &&定义一个基于表单类的用户表单 PROTECTED mypro &&保护类型属性mypro mypro=.f. &&定义属性并赋值 caption="测试表单" ADD OBJECT CB1 AS CommandButton &&于MyForm表单内添加一个命令按钮 PROCEDURE CB1.INIT WITH THISFORM.cb1 .CAPTION="退出" .WIDTH=80 .Left=thisform.width-90 .Top=20 ENDWITH ENDPROC PROCEDURE CB1.Click &&定义命令按钮的Click事件 IF MESSAGEBOX('你按下了关闭按钮;' chr(13) '你要关闭表单吗?',4 32,"提示")=6 Release thisform ENDIF ENDPROC PROCEDURE Click &&定义表单的click事件 = MESSAGEBOX('您点击的表单!') ENDPROC PROCEDURE DESTROY &&释放事件 CLEAR EVENTS ENDPROC ENDDEFINE 程序定义类的运用(二) 第二讲:类在程序中的使用 1、函数说明: [oObjName=]CREATEOBJECT(ClassName [, eParameter1, eParameter2, ...]) 使用类定义创建一个对象,返回对象。 oObjName,为将对象存储于一个内存变量,以便于在程序中引用该对象。 ClassName,为字符型表达式,用来创建对象的类。 eParameter,为传递的实参。 2、具体运用方法: 根据父类不同和使用情况不同有不同的运用方法,一般有以下几种情况: 一、使用vf的基类。CreateObject()函数的参数ClassName直接设置为每个指定基类即可。如创建一以基本表单为父类的子表单: myform=CreateObject("Format") myform.show 二、使用VF提供的类编辑器创建的可视类库(.VCX)。 使用 SET CLASSLIB 命令打开类库 创建完毕,不再使用该类库时,要及时使用Set ClassLib To命令关闭释放该类库。 三、程序代码与类定义在同一程序文件中。 正如程序代码不能在程序中的过程之后一样,程序代码只能出现在类定义之前,而不能在类定义之后。如,第一讲中的事例若包含于程序文件中,要显示类所创建的表单,则必须将下列代码放于首位: TestForm=createobject(" MyForm") &&创建以自定义表单为父类的表单对象 TestForm.show &&显示表单 Read EVENTS &&避免表单一闪即逝,可选。 提示:使用createobject()函数创建一个对象后,必须使用show方法来显示。 四、若定义类代码在一个程序文件内,而调用在另一个程序文件或在一个方法、事件程序内。 这种情况,需要使用SET PROCEDURE命令首先打开包含类定义代码的程序文件。其语法如下: SET PROCEDURE TO [FileName1 [, FileName2, ...]] [ADDITIVE] 其中:FileName为过程文件名;Additive为在附加该过程文件时,不关闭当前已经打开的过程文件。 注释:当前过程文件不使用时要及时关闭以释放内存。 SET PROCEDURE TO 关闭所有已打开过程文件; RELEASE PROCEDURE FileName1 [, FileName2 …]关闭指定过程文件 如上例: SET PROCEDURE to Test additive TestForm=createobject("MyForm") &&创建以自定义表单为父类的表单对象 TestForm.show &&显示表单 READ EVENTS 五、调用一个已经注册了的OLe控件创建对象。 首先指定搜寻OLE注册信息,执行命令SET OLEOBJECT ON 然后使用CREATEOBJECT()函数创建对象或使用GETOBJECT( )激活ole对象。 事例:创建一个Excel工作薄 OLEAPP=CREATEOBJECT("EXCEL.Application") &&创建EXCEL事例 OLEAPP.WORKBOOKS.ADD &&创建一个工作薄 oCurrentSheet=OleApp.Worksheets("Sheet1") &&当前使用电了表 六、在一个已经存在的容器类对象内添加或移去对象。 这种情况可直接调用容器对象的AddObject和RemoveObject方法,语法如下: Object.AddObject(cName, cClass [, cOLEClass] [, aInit1, aInit2 ...]) Object.RemoveObject(cObjectName) 事例:在表单内添加对象Txt1 myform=CreateObject("form") myform.AddObject("txt1","Textbox") myform.Txt1.vlaue="看到你了!" myform.RemoveObject(Txt1) &&如果对象是在程序内添加的,释放容器前先释放该对象
TAG: 运用 定义 程序 对象 创建 方法 一个 表单 属性 使用
|
| 上一篇:共享软件Internet营销随笔 下一篇:VFP数据库的备份与恢复 |
|
[ 收藏]
[ 推荐]
[ 评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
| |
|
|
|