当前位置: 首页 > 编程语言 > vfp > 正文

看实例学VFP:编程方式创建类

时间:2009-02-22 www.bianceng.cn 老马

上两个例子中介绍了使用“类设计器”来交互方式创建类,与交互方式相对应的,也可以用编程方式创建类。不过用这种方式来创建类很麻烦,并且需要极大的耐心去调试,相对来说用得比较少。

算是扩充一下知识面吧,本文对编程方式定义类的语句格式做一个简单的介绍,但是不必深究和浪费太多的时间,毕竟已经有可视化的、强大的“类设计器”可以用了;否则VFP这三个字母中,打头的这个V(Visual)也就失去其意义了。本文末尾给出了编程方式创建类的一个简单示例代码,运行时界面如下图:

运行时单击表单的空白处触发表单的click事件,弹出对话框后更新label控件的caption属性值,表单变成下图这样子:

vfp中使用DEFINE CLASS语句来定义类,并可以同时指定类和子类的属性、事件和方法。我们看一下DEFINE CLASS语句的格式:

DEFINE CLASS 类名1 AS 基类名
  [[Protected 属性名表]
    属性名=表达式
	……]
   [ADD OBJECT [Protected] 对象名 AS 类名2 [NOINIT]
     [WITH 属性名=表达式,…]…
   [[Protected] FUNCTION|PROCEDURE 对象引用.事件名
     语句序列
   [ENDFUNC|ENDPROC]
     …]
ENDDEFINE

说明:

(一) 要使用Define Class定义的类来创建对象,可以在程序中使用CreatObject()函数。

(二)参数“类名1”指定要创建的类的名称,“基类名”指出一个类或子类的父类,该父类可以是vfp的系统基类或者是另一个用户定义类。

(三)Protected属性名表阻止从类或子类定义的外部访问或改变对象的属性。

(四)ADD OBJECT从一个vfp基类、用户定义类、子类及OLE定制控件向灰或子类定义中添加一个对象。PROTECTED阻止从类或子类定义的外部访问或改变对象的特性。Protected关键字必须放在对象的前面,否则vfp会生成一个语法错误。

(五)“AS 类名2”指出包含加入类定义中的对象的类或子类名。参数NOINIT指出当一个对象被添加时,Init方法不被执行。WITH 属性名=表达式指出加到类或子类定义中去的对象的属性和属性值的列表。

(六)FUNCTION(函数)或PROCEDURE(过程)可在类或子类定义内创建一个事件和方法程序,以ENDFUNC或ENDPROC结束。

(七)用DEFINE CLASS定义的类是一组命令,象一个程序中的过程一样,一般放在程序的后面。

(八)示例代码:

Public Myform
Myform=CREATEOBJECT("Form1") &&根据定义表单类建立对象
Myform.Width=290
Myform.Caption="编程入门网-编程方式创建类和表单"
Myform.Closable=.f. &&禁用表单的关闭按钮
MYform.AutoCenter=.t.
Myform.Show
Myform.Circle(60,100,150,1)
READ EVENTS

DEFINE CLASS Form1 As Form &&定义表单类
   ADD OBJECT COMM1 AS CommandButton; &&定义表单中的命令按钮
      With Caption="退出",BackColor=2,Left=40
   ADD OBJECT Label1 AS Label;   &&定义表单中的标签
      With Top=60,Left=40,AutoSize=.t.,Caption="准备好了吗?"
   PROCEDURE Click
      =MESSAGEBOX("表单的click事件!")
      THISFORM.Label1.Caption="编程入门网祝大家学习顺利!"
   ENDPROC
   PROCEDURE COMM1.Click
      MESSAGEBOX("HELLO!")
      THISFORM.RELEASE
      CLEAR EVENTS
   ENDPROC
ENDDEFINE

将以上的代码保存为“编程方式创建类和表单.PRG”,运行该程序文件即可。

本例代码在Win2003+VFP6.0环境下调试通过。

查看全套“菜鸟也学VFP”教程