dedecms织梦内容管理系统      
首页 | IT信息 | 网页制作 | 编程开发 | 软件办公 | 数 据 库 | 图形图象 | 网络安装 | 软件下载 | 专题 | 会员中心 | 支持论坛
  当前位置:首页>编程开发>VFP>类和函数的应用>文章内容
[转贴]程序定义类的运用
来源: 作者: 发布时间: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条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·揭开 Winsock 的神秘面纱
·windows中Activx控件注册方法
·VFP函数之文件函数(一)
·VFP函数之文件函数(三)
·VFP函数之文件函数(二)
·TreeView 控件的介绍
·在 VFP 中使用 Windows Crypt AP
·如何改变文件的最后修改日期和
·译文:使用Shell.Application对
·在VFP中调用其他应用程序的实用
·用VC 给vfp数据库文件加密
·读取 INI 文件读取 INI 文件内容
  相关文章
·共享软件Internet营销随笔
·VFP数据库的备份与恢复
·用VFP为可视类增添绘图功能
·译文:使用Shell.Application对
·windows中Activx控件注册方法
·程序员高薪之路
·在VFP中用伪代码开发数据表维护
·揭开 Winsock 的神秘面纱
·LQL.NET收集整理和发现的[注意集
·一个我自已写来用来产生CA类的几
·VFP中实现背景音乐的几种方法
·起步二
Power by Anxi35