vfp对象和类

来源:互联网 发布:软件人员工资组成部分 编辑:程序博客网 时间:2024/05/01 15:10

由浅入深地讲解面对对象的 VFP 编程,SQL Select,C/S 开发,API 编程等等.....

第一讲 

对象和类

--本章简单说明一些对象和类的基本概念和特征

一.基本概念


什么是对象?

在 VFP 中,所有用户界面元素(表单,表格,文本框,标签等)都是对象,还有用于控制的,在运行时不可见的 Custom 类也是对象。对象拥有自己的属性和方法。


什么是对象的属性和方法?

属性是描述对象特征或保存特定信息的特殊的“变量”。
方法是由 VFP 代码组成的,属于某一特定对象的,可以执行某一特定动作的特殊的“过程或函数”。

可以简单地把属性理解为变量,方法理解为过程或函数。


什么是类?

关于什么是类有多种说法:

1 类是对象的范本
2 类是可重用代码
3 类是制造对象的模具。

但实质上都是一样的,你只需记住“类是可重用代码”就行了



为什么要使用类?

使用类的目的主要是为了提高编程效率。


类与对象的的区别和联系

类包含了对象的所有的属性和方法,它是对象的“模具”。对象是类的“实例”,可以由一个类制作出多个实例。
类本身并不完成任何操作,它只是定义对象的属性及方法, 而实际的操作则是由它所实例化的对象来完成的。



我是否必须使用类?

你不是必须在你的程序中使用类(如你的程序是一个从 FoxPro 2X 转换到 VFP 中的程序,可能你的程序中没有使用类),但是如果你是用 VFP 编程,则你可能已经在使用类了。只要你使用了 VFP 的表单设计器或表单向导,你就自觉不自觉地在使用类:
如果你使用表单设计器设计你的用户界面,你使用的是 VFP 的基类,如果你使用表单向导,则你使用的是 VFP 事先为你设计好的一组类,这些类主要在 VFP 主目录下的 Wizards 目录下, 只是你可能不知道罢了。



类的特征

1 封装
2 子类
3 继承
4 多态



在应用程序中使用类的一些好处

1 隐藏不必要的复杂性
2 充分利用现有类的功能
3 代码的重用
4 减少代码维护的难度



类的分类

1 按特性分类
    可视类
   非可视类

2 按用途分类
    应用程序类
    管理类
   包装类
   商业类

二.基本的操作

1 在一个新的类库中创建一个新类

以下以实际例子说明如何创建一个新的自定义表单类

要创建一个新类,按以下步骤:

a 新建一个名为 IT 的项目,并在项目管理器中选择“类”标签(如下图所示)


b 单击“新建”按钮来调出“新建类”对话框,然后在对话框中按下图输入必要的信息:

 

这将在当前目录中创建一个名为 myformvcx.vcx 的类库,并在该类库中创建一个名为 MyFormModal 的表单类

然后单击“新建类”对话框中的“确定”按钮。此时 VFP 会关闭“新建类”对话框, 关自动进入类设计器中让你修改该新建的类。

2 在一个已存在的类库中 创建一个新类

创建步骤同上,只是在新建类对话框中的“储存于”文本框的内容时,单击“储存于”文本框右边的三点按钮并选择一个已存在于磁盘上的类库文件(.VCX)

3 为类添加自定义属性

进入项目管理器的“类”标签,选择“myformvcx.vcx”类库中的“myformmodal”类并单击“修改”,这将进入到 VFP 的类设计器。

在你进入类设计器后,系统菜单将增加一个名为“类”的菜单栏,请注意,当你关闭类浏览器后,该菜单栏会自动关闭

从“类”菜单栏中选择“新建属性”菜单项,这将调出 VFP 的“新建属性”对话框,在“新建属性”对话框的名称对话框中输入我们要创建的新的属性名 cPrimaryTable, 请注意,我们在前面说过属性就是变量,因此属性的命名方式应遵循变量命名规则,另外,由于它是表单的一个属性,所以没有必要使用变量命名法中的第一个字符 - 作用域标识符。

还有,新建属性的属性名在表单或控件的属性窗口中全部是小写,因此在这里输入的大小写对于显示在属性窗口中的属性名的值是没有影响的,之所以在这里用了 cPrimaryTable 这样的格式,是为了在输入属性名时能清楚地知道该属性的作用及数据类型。因此它不是必须的。

另外为了便于识别,我们把我们的表单类的 Caption 属性值由默认的 form1 改为 MyFormModal。

再把该表单类的 WindowType 属性从默认的 0 改为 1

4 为类添加自定义方法

要为表单类创建自定义的方法,按以下步骤:

进入项目管理器的“类”标签,选择“myformvcx.vcx”类库中的“myformmodal”类并单击“修改”,这将进入到 VFP 的类设计器。

从“类”菜单栏中选择“新建方法程序”菜单项,这将调出 VFP 的“新建方法程序”对话框,在“新建方法程序”对话框的名称对话框中输入我们要创建的新的属性名 first,previous,next,last(注:一次输入一个,然后单击“添加”按钮),然后单击“关闭”按钮来关闭“新建方法程序”对话框。

然后双击表单调出 VFP 的类代码编辑窗口,从类代码窗口的“过程”下拉列表中选择以下方法并将下面的各方法的相关代码粘贴到各自的方法代码中:

方法    First     用途 定位记录指针到表的第一条记录

Local m.lcOriWA
m.lcOriWA = This.cprimarytable
Select &lcOriWA

Go top
this.refresh()

方法    Previous  用途 定位记录指针到表的当前记录的上一条记录

LOCAL m.lcOriWA
m.lcOriWA = THIS.cprimarytable
SELECT &lcOriWA

IF !BOF()
   SKIP -1
   THIS.REFRESH()
ELSE
   WAIT WINDOW NOWAIT "已到文件头"
ENDIF


方法    Next      用途 定位记录指针到表的当前记录的上下条记录

Local m.lcOriWA
m.lcOriWA = this.cprimarytable
Select &lcOriWA

If !eof()
   Skip
   If eof()
      Wait window nowait "已到文件尾"
      Skip -1
   Endif
   This.refresh()
Endif

方法    Last      用途 定位记录指针到表的最后一条记录

Local m.lcOriWA
m.lcOriWA = This.cprimarytable
Select &lcOriWA

Go bottom
This.refresh()

另外在表单类的 init 中粘贴以下代码:

thisform.cprimarytable = alias() 

5 使用一个已存在的表单类来创建一个新的表单

有三种方法

方法一

为了使用在上一步中创建的表单类,按以下步骤:

1 从“工具”->“选项” 的“控件”标签中,单击“添加”按钮并选择前面创建的“myformvcx.vcx”类库,这样就注册了“myformvcx.vcx”类库。

2 进入项目管理器选择新建表单,VFP 将会为你新建一个表单,从表单控件工具栏中单击第一个按钮“查看类”并从中选择 myformvcx, 此时,表单控件工具栏变得如下图所示:

3 单击工具栏上的 myformmodal 表单类,然后单击表单设计器中的表单 form1, 此时 VFP 会询问你“要添加表单,需要一个表单集对象,创建一个吗?”,选择“是”,此时 VFP 会在原有的表单上放置一个的,派生于 myformmodal 表单类的表单(它会盖在原表单上,你可以向下移动新添加的表单一些距离,这样你就可以看到表单集中有两个表单了)

4 选定原有的表单(一般是 Form1),并从"表单"菜单中选择移除表单,VFP 会询问"是否移除表单 Form1?", 选择"是".然后再从"表单"菜单中选择"移除表单集",当 VFP 询问你是否移除表单集时选择"是".这样,你就从“myformvcx.vcx”类库中的 myformmodal 表单类中创建了一个新表单.

方法二

1 从 "工具"->"选项" 中的表单标签中的"模板类"区域中,复选"表单"复选框,VFP 会提示你选择一个 VCX 文件及其中的表单类.

2 选择“myformvcx.vcx”类库并从右边的 "类名" 列表框中选择 myformmodal 表单类.并两次单击确定来关闭 "表单模板" 对话框和 "选项" 对话框.

3 进入项目管理器的"文档"标签并单击 "新建" 按钮来新建一个表单,在 VFP 的新建表单对话框中选择 "新建表单",这样 VFP 就会从“myformvcx.vcx”类库中的 myformmodal 表单类为你创建了一个新的表单

方法三

用以下命令来从“myformvcx.vcx”类库中的 myformmodal 表单类创建了一个新的表单:

create form MyNewForm as myformmodal from myformvcx

 

6 子类一个已存在的类

子类(Subclass)的意思是从一个类上派生出它的子类,该子类具有其父类所拥有的所有方法和属性.一般来说,只有在父的的功能不能满足需要时,才对已有的类进行子类,并对子类进行进一步的修改.

1 从"工具"菜单中选择"类浏览器"

2 从"类浏览器"的工具栏中单击"打开"按钮并选择 "myformvcx.vcx" 类库.

3 选定  myformmodal 表单类并单击"新类"按钮,VFP 会询问你类名,派生于那一个类,存储于什么 VCX 文件中,在这里,你可以在"类名"处填 MyFormModalNoTitle,派生于  myformmodal 类,储存于 myformvcx.vcx 类库中,最后单击确定,  这样就从 myformmodal 表单类中子类了一个新的,名为  MyFormModalNoTitle 的表单类.

7 向自己的表单中添加已存在的类并用自己的类来处理数据

一. 为了向表单中添加已存在的类,按以下步骤在 "myformvcx.vcx" 类库中创建一些命令按钮类:

1 单击文件菜单中的 "打开" 按钮并选择我们先前创建的项目文件 "IT.PJX" 进入项目管理器.

2 单击"类"标签来进入到项目管理器的类标签中,如果类标签中还没有内容, 单击添加按钮并选择 myformvcx.vcx 类库来把它添加到项目中来.

3 选定 myformvcx 并单击"新建"按钮, 这会显示 "新建类" 对话框.

4 在类名中输入我们要创建的新的命令按钮类的名字 cmdFirst,从派生于下拉列表框中选择 commandbutton,然后单击确定,这将会进入到类设计器中

5 修改我们新建的命令按钮类的以下属性和方法

  caption : 第一条

  在 click 中输入以下代码:

  thisform.first

按相似的方法创建以下命令按钮类:

cmdLast

  caption : 最后一条

  在 click 中输入以下代码:

  thisform.Last

 

cmdPrevious

  caption : 上一条

  在 click 中输入以下代码:

  thisform.Previous

 

cmdNext

  caption : 下一条

  在 click 中输入以下代码:

  thisform.Next

创建好命令按钮后的类库如下图显示:

二. 接着上面的步骤,保持项目管理器仍然是打开的

1 在命令窗口中输入以下命令来创建一个派生于 MyFormModal 表单类的表单:

create form MyNewForm as myformmodal from myformvcx

这将在表单设计器中显示新创建的表单,将表单设计器缩小一些,并拖动它与项目管理器错开一些位置,如下图所示:

2 直接从项目管理器中的类标签中拖动四个不同的命令按钮类到表单上的适当位置:

完成后的表单如下图所示:

3 添加一个表到表单的数据环境:右击表单并从弹出菜单中选择"数据环境", VFP 将提示你打开一个表,你随便选择一个表并单击确定来关闭 "打开" 对话框,再单击 "添加表或视图" 对话框中的关闭按钮来关闭 "添加表或视图" 对话框

4 从数据环境中随便拖动一些字段到表单上,如下图所示:

4 保存表单文件并切换到项目管理器的 "文档" 标签,单击添加按钮把我们刚才创建的表单 mynewform.scx 添加到项目中来.

5 选定表单 mynewform 并单击 "运行" 按钮来运行我们刚刚创建的表单,你可以单击不同的命令按钮来查看运行效果.虽然在该表单中没有任何代码,但是各命令按钮都能起作用.这就是用类来工作的好处之一.

8 保存一个现有的表单到一个已存在的类库中

随便打开一个已存在的表单并从文件菜单中选择另存为类即可将它保存为一个表单类.

9 保存表单上的一个或多个控件到一个类库中作为类

随便打开一个已存在的表单,选定一个或多个控件并从文件菜单中选择另存为类即可将选定的对象保存为一个容器类.

原创粉丝点击