第 11章 面向对象的程序设计学习要点
1,对象,属性事件及方法程序
2,对象引用规则
3,类与对象,基类,子类,用户定义类,
容器类和控件类
4,类的定义和编辑第 11章 面向对象的程序设计
11.1 面向对象的基本概念
11.2 对象引用
11.3 类的基本概念
11.4 定义类习题及参考答案第 11章 面向对象的程序设计
Visual FoxPro 6.0在支持传统的结构化程序设计方法的基础上,全面引入面向对象的程序设计 ( Object-Oriented
Programming,OOP) 的方法 。 用户通过面向对象的方法,
可以设计出更加美观的应用程序界面,开发出真正的关系数据库应用程序 。 面向对象应用程序设计根本地改变了早期 FoxPro
应用程序面向过程的开发方式,将重点放在了对象之间的联系上,而不是具体实现的细节 。 面向对象程序设计通过代码重用和继承的方式,使用户在设计程序时不再做大量的重复劳动,
且将对象的细节隐藏起来,让用户将注意力集中在对象与系统其它部分的联系上,这是结构化程序设计方法所不能做到的 。
11.1 面向对象的基本概念在面向对象的程序设计中,对象是构成程序的基本单位和运行实体 。 本节将介绍对象和它的属性,事件,方法程序等概念和一些基本操作 。
11.1.1 对象对象 ( Object) 就是一个实体,任何对象都具有自己的特征和行为 。 在面向对象程序设计中,所有事物都可以被抽象为对象,例如表单上的文本框是对象,表单本身也是一个对象 。
在 Visual FoxPro 6.0中,又将对象分为控件和容器两种 。
⑴ 控件:是表单上显示数据和执行操作的基本对象 。 在
Visual FoxPro 6.0中,控件有标签,文本框,命令按钮等 。
⑵ 容器:是一种可以容纳其它对象的对象 。 在 Visual
FoxPro 6.0中包含了很多容器对象,如表单集,表单,页框,
命令按钮组等 。
11.1.2 属性对象的属性即对象的特征,性质,例如当描述一个命令按钮时,可以用它所在的位置,尺寸大小,颜色及它上面显示的文字的字体,字号等特征来形容,
这些特征都可用属性来表示 。
常用的对象属性如表 11-1。
不同的对象所具有的属性是不相同的,这也可从属性的定义中体现出来 。 但是一些对象会有一些共性 。
11.1.2 属性表 11-1 常用属性介绍属 性 说 明 应 用 于
Caption 设置对象的标题 表单、标签、命令按钮等
Name 设置对象的名字 任何对象
Value 设置控件当前状态 文本框、列表框等
ForeColor 设置对象中的前景色 表单、标签、文本框等
BackColor 设置对象内部的背景色 表单、标签、文本框等
BackStyle 设置对象背景是否透明 表单、文本框、图像等
AlwaysOnTop 是否处于其他窗口之上 表单
11.1.2 属性
AutoCenter 是否在主窗口内自动居中 表单
ScaleMode 用于设置坐标单位 表单
Closable 标题栏中关闭按钮是否有效 表单
Controlbox 是否取消标题栏所有按钮 表单、工具栏
MaxButton 是否有最大化按钮 表单
MinButton 是否有最小化按钮 表单
Movable 运行时表单能否移动 表单
WindowState 设置运行时是最大化或最小化 表单
AutoCloseTables 表单释放时是否关闭表或视图,
默认为,T,数据环境
AutoOpenTables 表单加载时是否打开表或视图,
默认为,T,数据环境
11.1.3 事件事件 ( Event) 是指可能会发生在对象上的事情,也即对对象所做的操作 ( 或者系统对某个对象的操作 ),如按钮被单击,
对象被拖动,被改变大小,被双击等 。 一个对象可以有多个事件,但是每个事件都是由系统预先规定的 。 一个事件对应于一个程序,即事件过程 。
1.事件驱动工作方式事件一旦被触发 ( 即操作发生 ),系统马上就去执行与该事件对应的过程 。 等事件过程执行完毕后,系统又处于等待某事件发生的状态,这种程序执行方式明显地不同于面向过程的程序设计,即应用程序的事件驱动工作方式,表 11-2列出了部分常见的事件 。
11.1.3 事件表 11-2 Visual FoxPro 6.0系统常见事件事 件 触发时机 事 件 触发时机
Load 创建对象前 MouseUp 释放鼠标键时
Init 创建对象时 MouseDown 按下鼠标键时
Activate 对象激活时 KeyPress 按下并释放某键盘键时
GotFocus对象获得焦点时 Valid 对象失去焦点前
Click 单击鼠标左键时 LostFocus 对象失去焦点时
DblClick 双击鼠标左键时 Unload 释放对象时
Destroy 释放一个对象时 InteractiveChange 改变控件的值时
Resize 调整对象大小时 Scrolled 在表格中移动滚动条时
11.1.3 事件从表 11-2可知,事件包括事件过程和事件触发方式两个方面 。 事件过程的代码应该事先编写好 。 事件触发方式可分为 3种:
● 用户触发:如单击命令按钮事件 。
● 系统触发:如计时器事件,将会自动按设定的时间间隔发生 。
● 代码触发:如用代码来调用事件过程 。
11.1.3 事件
⒉ 为事件编写代码编写代码先要打开代码编辑窗口,打开某对象代码编辑窗口的方法有 3种 。
● 双击该对象 。
● 选择对象的快捷菜单中的,代码,选项 。
● 选择显示菜单的,代码,选项 。
代码编辑窗口中包含两个组合框和一个列表框 。
对象组合框用来重新确定对象,过程组合框用来确定所要的事件 ( 或方法程序 ),代码则在列表框中输入 。
11.1.4 方法程序方法程序又简称为方法,是指对象所固有完成某种任务的功能 。
⒈ Cls方法功能:清除表单中的图形和文本 。
语法,Object.Cls
说明,Cls清除运行期间图形和打印语句生成的文本和图形 。 Cls方法不影响设计期间放置在表单上的背景位图 。 Cls方法将 CurrentX和 CurrentY属性重新设置为 0。
11.1.4 方法程序
⒉ Refresh方法功能:重画表单或控件,并刷新所有值,或者刷新一个项目的显示 。
语法,[Form.]Object.Refresh
说明:一般地,画表单或控件是在没有事件发生时自动处理的 。 需要立刻更新表单或控件时可使用
Refresh方法 。 若要在加载另一个表单的同时显示某个表单,或更新控件的内容时,Refresh方法有效 。
11.1.4 方法程序
⒊ SetFocus方法功能:为一个控件指定焦点 。
语法,Control.SetFocus
说明:如果控件的 Enabled或 Visible属性设置为,F.,或者控件的 When事件返回,F.,则不能给一个控件指定焦点;如果 Enabled或 Visible属性已设置为,F.,则控件在使用 SetFocus方法接受焦点之前,
必须首先把它们设置为,T.。
11.1.4 方法程序
⒋ Release方法功能:从内存中释放表单集或表单 。
语法,Object.Release
说明:当用 DO FORM命令创建表单集或表单,
并 且 不存 在 可引 用该 表 单集 或表 单 的变 量时,
Release方法很有效 。 可以使用 Screen对象的 Forms
集合找到表单集或表单,并调用其 Release方法 。 可以使用 Screen对象的表单集合来查找表单或表单集,
并且调用 Release方法 。 应用于表单,表单集,
_SCREEN。
11.2 对象引用在面向对象的程序设计中要常常引用对象,或引用对象的属性,事件与调用方法程序,本节将介绍对象引用的格式,并通过几个例子来说明 。
11.2.1 对象引用规则在程序设计中,引用对象时要遵循一定的规则,主要表现在以下 4个方面 。
1.在程序设计中一般用以下关键字开头
● ThisFormSet && 表示当前表单集
● ThisForm && 表示当前表单
● This && 表示当前对象
11.2.1 对象引用规则
2.引用格式一般在引用关键字后跟一个点号,表示从属关系,再写出被引用对象或者对象的属性,
事件或方法程序 。 例如:
This.Caption=“教师情况一览表,
&& 为本表单标题属性赋值
ThisForm.Refresh
&& 调用本表单 Refresh方法程序
11.2.1 对象引用规则
3.允许多级引用在应用程序中,多个对象之间有多级的从属关系,允许多级引用,但要逐级引用 。 下面是几种常用的引用格式 。
ThisFormSet.PropertyName | Event | Method
| ObjectName
ThisForm.PropertyName | Event | Method |
ObjectName
11.2.1 对象引用规则
This.PropertyName | Event | Method |
ObjectName
ObjectName.PropertyName | Event | Method
其中 PropertyName表示属性名,Event
表 示 事 件,Method 表 示 方 法 程 序,
ObjectName表示对象名 。
11.2.1 对象引用规则
4.父调用父调用即控件引用包含它的容器控件 。
格式为,Control.Parent
其中 Control表示控件,Parent表示包含该控件的容器 。
11.2.2 编程方式设置属性值属性除可在属性窗口设置外,也可通过编程方式来设置 。
格式为,ObjectName.Property[=Setting]
其中 Setting指要设置的属性值,例如前面引用格式中所举的例子 。
此外,用户还可以使用 RGB函数来返回一种颜色 。
格式为,RGB(nRedValue,nGreenValue,nBlueValue)
其中,参数 nRedValue,nGreenValue,nBlueValue
分别指定红,绿,蓝色成份的深度 。 大小范围是 0~255。
11.2.3 方法程序的调用方法程序通常在事件代码中调用,调用时必 须 遵 循 对 象 引 用 规 则 。 例如
ThisForm.Release,表 示 引 用 本 表 单 的
Release方法,从内存释放表单 。
11.3 类的基本概念类在程序设计中被经常用到,本节将介绍有关类的一些基本概念和表现特征 。
11.3.1 类的概念类是面向对象程序设计中一个重要的概念,包括基类,子类,用户自定义类,容器类,库类等 。
1.类与对象在面向对象程序设计中,类与对象都是应用程序的组装模块,它和对象既有区别又存在联系 。
11.3.1 类的概念类和对象关系密切,但并不相同 。 类包含了有关对象的特征和行为信息,它是对象的蓝图和框架 。 类是定义了对象特征以及对象外观和行为的模板 。 例如在表单控件工具栏中,每个按钮都代表一个类,用其中某个按钮在表单上创建的一个控件就是一个对象 。
11.3.1 类的概念类和对象具有以下关系:
● 类是对象的定义 。 类定义并提供了对象具有的属性,事件和方法程序 。
● 对象通过类而产生 。
● 对象是类的一个实例 。
11.3.1 类的概念
2.基类基类是 Visual FoxPro 6.0预先定义的类,在,新建类,对话框的,派生于,下拉列表框中,包含了全部基类,如图 11-1所示 。 如,表单,,,组合框,等 。
初始的表单控件工具栏中包含的类 ( 如,文本框,,
,命令按钮,,,标签,等 ) 也是基类 。 基类可作为用户自定义类的基础 。 用户可从基类来创建新类,并增添自己需要的新功能 。
11.3.1 类的概念图 11-1,新建类”对话框
11.3.1 类的概念
3.子类子类是指以某个类的定义为基础创建的新类 。 子类所基于的类称为父类 。 例如若要从基类创建出新类时,那么基类就是父类,新建类就是子类 。
子类将继承父类的全部特征,包括对父类所做的任何修改 。
4.用户定义类用户可以从基类派生出子类,即用户定义类; Visual
FoxPro 6.0还允许从用户定义类派生出子类 。 所以说用户自定义类可以是子类,也可以是父类 。
可以为用户定义类设置属性,编写代码与方法程序,也可创建新的属性和方法程序 。 用户也可以将自己定义的类添加到表单控件工具栏中 。
11.3.1 类的概念
5.容器类和控件类类也可以分为容器类和控件类两种,用户可以从基类派生出容器类,例如从 Form类可派生出表单类 。
6.类库类库可用来存储以可视方式设计的类,其文件扩展名为,vcx。 一个类库通常可容纳多个子类,这些子类允许由不同的基类派生 。
11.3.2 类的特征类作为一个模板,所有对象的属性,事件,方法程序在定义类时被指定 。 此外,类还有如下特征,这些特征可提高代码的可重用性和易维护性 。
1.封装特征封装特征指包含并隐藏对象的信息,如内部数据结构,对象的方法程序和属性代码 。 封装隐藏了不必要的复杂性,隐藏对象信息具有以下优点:
● 有利于对复杂对象的管理,使用户集中精力来使用对象的特性 。
● 有利于程序的安全性,防止代码不慎受到破坏 。
11.3.2 类的特征
2.子类特征子类可以具有其父类的全部功能和特点,
但也可以增加自己的属性和方法,使它具有与父类不同的特殊性,使得用户在程序设计时更得心应手,设计出满足实际情况的类 。
通过设计一个适合应用程序的子类,并在多处创建它的实例,就可以使代码得到重复利用,因此定义子类是减少程序代码的一个方法 。
11.3.2 类的特征
3.继承性特征类的继承性可以从下述的几个方面来理解:
● 对象能自动继承创建它的类的功能 。
● 子类能自动继承父类的功能 。
● 对一个类的改动能自动反映到它的所有子类中 。
继承性体现在软件中,若发现类中有一个小错误,
用户不必逐一修改子类的代码,只需要在父类中改动一处,然后这个变动将体现在全部子类中 。 所以说继承性不仅节省了用户的时间与精力,还减少了维护代码的难度,它是合理地进行代码维护的重要措施 。
11.4 定义类
Visual FoxPro 6.0最强大的功能之一就是支持创建在应用程序中可以重复使用的类,用户定义的类能添加到表单控件工具栏中 。 用户定义类通常有以下功能 。
● 封装通用功能:为通用功能创建控件类,可以将它们的实例添加到表单中 。 例如移动记录指针的命令按钮类,表单关闭按钮类,帮助按钮类等 。
● 赋予应用程序统一的外观和风格:例如创建了具有独特外观的文本框类,便可在应用程序所有需要文本框的地方都使用这个类 。
11.4.1 创建用户定义类下面通过一个例子来介绍创建用户定义类的步骤 。
[例 11-1] 使用类设计器创建一个用户定义类,类名为,记录指针移动类,,基类为命令按钮组,存储到
d:\vfp6\commandgroup1.vcx类库文件中 。
⑴ 选择,新建,,或者在,项目管理器,窗口的
,类,选项卡中单击,新建,按钮,在弹出的,新建,
对话框中选择,类,单选按钮;然后单击新文件按钮,
打开,新建类,对话框 。 如图 11-2所示 。
11.4.1 创建用户定义类图 11-2,新建类”对话框
11.4.1 创建用户定义类
⑵ 指定新建类所需的类库,基类与类名 。
其中,,类名,文本框用于指定类名,新生成的类是基类的子类;,派生于,下拉列表框用于指定新生成类的基类;,存储于,文本框用于指定新类库名或已有类库的名字,类库名可包含路径,若未指出路径表示使用默认路径 。
⑶ 指定各项内容后,单击,确认,按钮,
打开如图 11-3所示的,类设计器,窗口 。
11.4.1 创建用户定义类图 11-3 类设计器窗口
11.4.1 创建用户定义类
⑷ 通过表单的属性窗口设置其按钮个数及相应标题,并设置事件代码 。 设计好的命令按钮组类如图 11-4所示 。
图 11-4,记录指针移动类”窗口
11.4.2 将类添加到工具栏用户定义类完成后,即可以将其添加到表单控件工具栏中,然后通过使用该工具栏中的,查看类,按钮来打开定义的类 。
[例 11-2] 将创建的,记录指针移动类,添加到表单控件工具栏中,并通过它在表单上创建一个记录指针移动命令按钮组 。
⑴ 选择,新建,,在打开的对话框中选择,表单,选项,然后单击,新建,按钮,新建一个表单 。
图 11-5 新建的表单设计窗口
11.4.2 将类添加到工具栏
⑵ 在,表单控件,工具栏上单击 ( 查看类 ) 按钮,在弹出的菜单中选择,添加,,在打开的,打开,对话框中指定要添加的可视类库的文件名 。
图 11-6 在“打开”对话框中指定类文件名
11.4.2 将类添加到工具栏
⑶ 单击,打开,按钮,则打开的表单控件工具栏如图 11-7所示 。
新添加的 Commandgroup类图 11-7 新添加类按钮
11.4.2 将类添加到工具栏
⑷ 单击新添加类按钮选中它,在表单中单击添加命令按钮组,结果如图 11-8所示 。
图 11-8 添加命令按钮组的表单
11.4.3 类的编辑在 Visual FoxPro 6.0中,用户不仅可以修改用户定义类,而且可以删除类库中的类,或删除类库 。
1.修改用户定义类若要为用户定义类设置属性,编写事件代码或方法程序代码,或者是创建新的属性或方法程序,都必须打开类设计器来实现 。 要打开类设计器,只要打开一个可视类库,并选择其中的一个类即可 。
[例 11-3] 修改 [例 11-1]所设计的命令按钮组类,
要求为表单定义的基于该类的每个按钮均有提示功能 。
11.4.3 类的编辑
⑴ 选择,打开,,在打开的对话框的文件类型列表框中选择,可视类库,( *.vcx),从中选择存在的 Commandgroup1类库名,单击,确认,按钮 。
⑵ 在打开的,打开,对话框中右边的列表框中选择要修改的类名 。
图 11-9 选择要修改的类名
11.4.3 类的编辑
⑶ 单击,打开,按钮,打开,类设计器,窗口,
选择要设置提示内容的按钮,打开,属性,窗口,将其 ToolTipText( 显示提示内容 ) 属性设置成所要显示的文本内容 。
⑷ 用同样方法设置其它按钮的提示文本后,关闭
,类设计器,窗口,选择保存修改即可 。
11.4.3 类的编辑图 11-10 设置按钮的提示文本
11.4.3 类的编辑
2.删除类库中的一个类要删除类库中的类,可以使用下述的两种方法之一 。
● 使用 REMOVE CLASS命令,REMOVE CLASS
<类名 > OF <类库名 >
● 在,项目管理器,的,类,选项卡中选择指定类库中的一个类,单击,移去,按钮即可 。
3.删除类库要删除类库只要将指定的,vcx类库文件删除即可 。
或者在,项目管理器,的,类,选项卡中选中要删除的类库后,再单击,移去,按钮即可 。
习题
1,选择题
⑴ 现实世界中的每一个事件都是一个对象,任何对象都有自己的属性和方法 。 对属性的描述正确的是 。
A.属性是对象所具有的内部特征
B.属性就是对象所具有的固有特征,一般用各种类型的数据来表示
C.属性只是对象所具有的外部特征
D.属性就是对象所具有的固有方法
⑵ 下面关于,类,的描述,错误的是 。
A.一个类包含了相似的有关对象的特征和行为方法
B.类只是实例对象的抽象
C.类并不实行任何行为操作,它仅仅表明该怎样做
D.类可以按所定义的属性,事件和方法进行实际的行为操作习题
⑶ Visual FoxPro 6.0系统预设计了一批各具特征的可重复调用的高度程序化的程序段,这些程序段被称为 。
A.基类 B.类 C.对象 D.控件
⑷ 面向对象程序设计就是将 处理由面向过程转为面向对象,并采用事件驱动其执行过程的程序设计方法 。
A.文件 B.对象 C.程序 D.数据
⑸ 表示当前对象 。
A.This B.ThisForm C.ThisFormSet D.Parent
习题
2,填空题
⑴ OOP的中文含义是 。
⑵ 对象具有属性,事件和 三大要素 。
⑶ 类具有,和 的特征,这就大大加强了代码的可重用性 。
⑷ 类是对象的集合,它包含了相似的有关对象的特征和行为方法,而 是类的实例 。
⑸ Visual FoxPro 6.0的基类可分为 和 两大类 。
参考答案
1,选择题
⑴ B ⑵ D ⑶ A ⑷ D ⑸ A
2,填空题
⑴ 面向对象程序设计
⑵ 方法程序
⑶ 封装性,层次性,继承性
⑷ 对象
⑸ 容器类、控件类
1,对象,属性事件及方法程序
2,对象引用规则
3,类与对象,基类,子类,用户定义类,
容器类和控件类
4,类的定义和编辑第 11章 面向对象的程序设计
11.1 面向对象的基本概念
11.2 对象引用
11.3 类的基本概念
11.4 定义类习题及参考答案第 11章 面向对象的程序设计
Visual FoxPro 6.0在支持传统的结构化程序设计方法的基础上,全面引入面向对象的程序设计 ( Object-Oriented
Programming,OOP) 的方法 。 用户通过面向对象的方法,
可以设计出更加美观的应用程序界面,开发出真正的关系数据库应用程序 。 面向对象应用程序设计根本地改变了早期 FoxPro
应用程序面向过程的开发方式,将重点放在了对象之间的联系上,而不是具体实现的细节 。 面向对象程序设计通过代码重用和继承的方式,使用户在设计程序时不再做大量的重复劳动,
且将对象的细节隐藏起来,让用户将注意力集中在对象与系统其它部分的联系上,这是结构化程序设计方法所不能做到的 。
11.1 面向对象的基本概念在面向对象的程序设计中,对象是构成程序的基本单位和运行实体 。 本节将介绍对象和它的属性,事件,方法程序等概念和一些基本操作 。
11.1.1 对象对象 ( Object) 就是一个实体,任何对象都具有自己的特征和行为 。 在面向对象程序设计中,所有事物都可以被抽象为对象,例如表单上的文本框是对象,表单本身也是一个对象 。
在 Visual FoxPro 6.0中,又将对象分为控件和容器两种 。
⑴ 控件:是表单上显示数据和执行操作的基本对象 。 在
Visual FoxPro 6.0中,控件有标签,文本框,命令按钮等 。
⑵ 容器:是一种可以容纳其它对象的对象 。 在 Visual
FoxPro 6.0中包含了很多容器对象,如表单集,表单,页框,
命令按钮组等 。
11.1.2 属性对象的属性即对象的特征,性质,例如当描述一个命令按钮时,可以用它所在的位置,尺寸大小,颜色及它上面显示的文字的字体,字号等特征来形容,
这些特征都可用属性来表示 。
常用的对象属性如表 11-1。
不同的对象所具有的属性是不相同的,这也可从属性的定义中体现出来 。 但是一些对象会有一些共性 。
11.1.2 属性表 11-1 常用属性介绍属 性 说 明 应 用 于
Caption 设置对象的标题 表单、标签、命令按钮等
Name 设置对象的名字 任何对象
Value 设置控件当前状态 文本框、列表框等
ForeColor 设置对象中的前景色 表单、标签、文本框等
BackColor 设置对象内部的背景色 表单、标签、文本框等
BackStyle 设置对象背景是否透明 表单、文本框、图像等
AlwaysOnTop 是否处于其他窗口之上 表单
11.1.2 属性
AutoCenter 是否在主窗口内自动居中 表单
ScaleMode 用于设置坐标单位 表单
Closable 标题栏中关闭按钮是否有效 表单
Controlbox 是否取消标题栏所有按钮 表单、工具栏
MaxButton 是否有最大化按钮 表单
MinButton 是否有最小化按钮 表单
Movable 运行时表单能否移动 表单
WindowState 设置运行时是最大化或最小化 表单
AutoCloseTables 表单释放时是否关闭表或视图,
默认为,T,数据环境
AutoOpenTables 表单加载时是否打开表或视图,
默认为,T,数据环境
11.1.3 事件事件 ( Event) 是指可能会发生在对象上的事情,也即对对象所做的操作 ( 或者系统对某个对象的操作 ),如按钮被单击,
对象被拖动,被改变大小,被双击等 。 一个对象可以有多个事件,但是每个事件都是由系统预先规定的 。 一个事件对应于一个程序,即事件过程 。
1.事件驱动工作方式事件一旦被触发 ( 即操作发生 ),系统马上就去执行与该事件对应的过程 。 等事件过程执行完毕后,系统又处于等待某事件发生的状态,这种程序执行方式明显地不同于面向过程的程序设计,即应用程序的事件驱动工作方式,表 11-2列出了部分常见的事件 。
11.1.3 事件表 11-2 Visual FoxPro 6.0系统常见事件事 件 触发时机 事 件 触发时机
Load 创建对象前 MouseUp 释放鼠标键时
Init 创建对象时 MouseDown 按下鼠标键时
Activate 对象激活时 KeyPress 按下并释放某键盘键时
GotFocus对象获得焦点时 Valid 对象失去焦点前
Click 单击鼠标左键时 LostFocus 对象失去焦点时
DblClick 双击鼠标左键时 Unload 释放对象时
Destroy 释放一个对象时 InteractiveChange 改变控件的值时
Resize 调整对象大小时 Scrolled 在表格中移动滚动条时
11.1.3 事件从表 11-2可知,事件包括事件过程和事件触发方式两个方面 。 事件过程的代码应该事先编写好 。 事件触发方式可分为 3种:
● 用户触发:如单击命令按钮事件 。
● 系统触发:如计时器事件,将会自动按设定的时间间隔发生 。
● 代码触发:如用代码来调用事件过程 。
11.1.3 事件
⒉ 为事件编写代码编写代码先要打开代码编辑窗口,打开某对象代码编辑窗口的方法有 3种 。
● 双击该对象 。
● 选择对象的快捷菜单中的,代码,选项 。
● 选择显示菜单的,代码,选项 。
代码编辑窗口中包含两个组合框和一个列表框 。
对象组合框用来重新确定对象,过程组合框用来确定所要的事件 ( 或方法程序 ),代码则在列表框中输入 。
11.1.4 方法程序方法程序又简称为方法,是指对象所固有完成某种任务的功能 。
⒈ Cls方法功能:清除表单中的图形和文本 。
语法,Object.Cls
说明,Cls清除运行期间图形和打印语句生成的文本和图形 。 Cls方法不影响设计期间放置在表单上的背景位图 。 Cls方法将 CurrentX和 CurrentY属性重新设置为 0。
11.1.4 方法程序
⒉ Refresh方法功能:重画表单或控件,并刷新所有值,或者刷新一个项目的显示 。
语法,[Form.]Object.Refresh
说明:一般地,画表单或控件是在没有事件发生时自动处理的 。 需要立刻更新表单或控件时可使用
Refresh方法 。 若要在加载另一个表单的同时显示某个表单,或更新控件的内容时,Refresh方法有效 。
11.1.4 方法程序
⒊ SetFocus方法功能:为一个控件指定焦点 。
语法,Control.SetFocus
说明:如果控件的 Enabled或 Visible属性设置为,F.,或者控件的 When事件返回,F.,则不能给一个控件指定焦点;如果 Enabled或 Visible属性已设置为,F.,则控件在使用 SetFocus方法接受焦点之前,
必须首先把它们设置为,T.。
11.1.4 方法程序
⒋ Release方法功能:从内存中释放表单集或表单 。
语法,Object.Release
说明:当用 DO FORM命令创建表单集或表单,
并 且 不存 在 可引 用该 表 单集 或表 单 的变 量时,
Release方法很有效 。 可以使用 Screen对象的 Forms
集合找到表单集或表单,并调用其 Release方法 。 可以使用 Screen对象的表单集合来查找表单或表单集,
并且调用 Release方法 。 应用于表单,表单集,
_SCREEN。
11.2 对象引用在面向对象的程序设计中要常常引用对象,或引用对象的属性,事件与调用方法程序,本节将介绍对象引用的格式,并通过几个例子来说明 。
11.2.1 对象引用规则在程序设计中,引用对象时要遵循一定的规则,主要表现在以下 4个方面 。
1.在程序设计中一般用以下关键字开头
● ThisFormSet && 表示当前表单集
● ThisForm && 表示当前表单
● This && 表示当前对象
11.2.1 对象引用规则
2.引用格式一般在引用关键字后跟一个点号,表示从属关系,再写出被引用对象或者对象的属性,
事件或方法程序 。 例如:
This.Caption=“教师情况一览表,
&& 为本表单标题属性赋值
ThisForm.Refresh
&& 调用本表单 Refresh方法程序
11.2.1 对象引用规则
3.允许多级引用在应用程序中,多个对象之间有多级的从属关系,允许多级引用,但要逐级引用 。 下面是几种常用的引用格式 。
ThisFormSet.PropertyName | Event | Method
| ObjectName
ThisForm.PropertyName | Event | Method |
ObjectName
11.2.1 对象引用规则
This.PropertyName | Event | Method |
ObjectName
ObjectName.PropertyName | Event | Method
其中 PropertyName表示属性名,Event
表 示 事 件,Method 表 示 方 法 程 序,
ObjectName表示对象名 。
11.2.1 对象引用规则
4.父调用父调用即控件引用包含它的容器控件 。
格式为,Control.Parent
其中 Control表示控件,Parent表示包含该控件的容器 。
11.2.2 编程方式设置属性值属性除可在属性窗口设置外,也可通过编程方式来设置 。
格式为,ObjectName.Property[=Setting]
其中 Setting指要设置的属性值,例如前面引用格式中所举的例子 。
此外,用户还可以使用 RGB函数来返回一种颜色 。
格式为,RGB(nRedValue,nGreenValue,nBlueValue)
其中,参数 nRedValue,nGreenValue,nBlueValue
分别指定红,绿,蓝色成份的深度 。 大小范围是 0~255。
11.2.3 方法程序的调用方法程序通常在事件代码中调用,调用时必 须 遵 循 对 象 引 用 规 则 。 例如
ThisForm.Release,表 示 引 用 本 表 单 的
Release方法,从内存释放表单 。
11.3 类的基本概念类在程序设计中被经常用到,本节将介绍有关类的一些基本概念和表现特征 。
11.3.1 类的概念类是面向对象程序设计中一个重要的概念,包括基类,子类,用户自定义类,容器类,库类等 。
1.类与对象在面向对象程序设计中,类与对象都是应用程序的组装模块,它和对象既有区别又存在联系 。
11.3.1 类的概念类和对象关系密切,但并不相同 。 类包含了有关对象的特征和行为信息,它是对象的蓝图和框架 。 类是定义了对象特征以及对象外观和行为的模板 。 例如在表单控件工具栏中,每个按钮都代表一个类,用其中某个按钮在表单上创建的一个控件就是一个对象 。
11.3.1 类的概念类和对象具有以下关系:
● 类是对象的定义 。 类定义并提供了对象具有的属性,事件和方法程序 。
● 对象通过类而产生 。
● 对象是类的一个实例 。
11.3.1 类的概念
2.基类基类是 Visual FoxPro 6.0预先定义的类,在,新建类,对话框的,派生于,下拉列表框中,包含了全部基类,如图 11-1所示 。 如,表单,,,组合框,等 。
初始的表单控件工具栏中包含的类 ( 如,文本框,,
,命令按钮,,,标签,等 ) 也是基类 。 基类可作为用户自定义类的基础 。 用户可从基类来创建新类,并增添自己需要的新功能 。
11.3.1 类的概念图 11-1,新建类”对话框
11.3.1 类的概念
3.子类子类是指以某个类的定义为基础创建的新类 。 子类所基于的类称为父类 。 例如若要从基类创建出新类时,那么基类就是父类,新建类就是子类 。
子类将继承父类的全部特征,包括对父类所做的任何修改 。
4.用户定义类用户可以从基类派生出子类,即用户定义类; Visual
FoxPro 6.0还允许从用户定义类派生出子类 。 所以说用户自定义类可以是子类,也可以是父类 。
可以为用户定义类设置属性,编写代码与方法程序,也可创建新的属性和方法程序 。 用户也可以将自己定义的类添加到表单控件工具栏中 。
11.3.1 类的概念
5.容器类和控件类类也可以分为容器类和控件类两种,用户可以从基类派生出容器类,例如从 Form类可派生出表单类 。
6.类库类库可用来存储以可视方式设计的类,其文件扩展名为,vcx。 一个类库通常可容纳多个子类,这些子类允许由不同的基类派生 。
11.3.2 类的特征类作为一个模板,所有对象的属性,事件,方法程序在定义类时被指定 。 此外,类还有如下特征,这些特征可提高代码的可重用性和易维护性 。
1.封装特征封装特征指包含并隐藏对象的信息,如内部数据结构,对象的方法程序和属性代码 。 封装隐藏了不必要的复杂性,隐藏对象信息具有以下优点:
● 有利于对复杂对象的管理,使用户集中精力来使用对象的特性 。
● 有利于程序的安全性,防止代码不慎受到破坏 。
11.3.2 类的特征
2.子类特征子类可以具有其父类的全部功能和特点,
但也可以增加自己的属性和方法,使它具有与父类不同的特殊性,使得用户在程序设计时更得心应手,设计出满足实际情况的类 。
通过设计一个适合应用程序的子类,并在多处创建它的实例,就可以使代码得到重复利用,因此定义子类是减少程序代码的一个方法 。
11.3.2 类的特征
3.继承性特征类的继承性可以从下述的几个方面来理解:
● 对象能自动继承创建它的类的功能 。
● 子类能自动继承父类的功能 。
● 对一个类的改动能自动反映到它的所有子类中 。
继承性体现在软件中,若发现类中有一个小错误,
用户不必逐一修改子类的代码,只需要在父类中改动一处,然后这个变动将体现在全部子类中 。 所以说继承性不仅节省了用户的时间与精力,还减少了维护代码的难度,它是合理地进行代码维护的重要措施 。
11.4 定义类
Visual FoxPro 6.0最强大的功能之一就是支持创建在应用程序中可以重复使用的类,用户定义的类能添加到表单控件工具栏中 。 用户定义类通常有以下功能 。
● 封装通用功能:为通用功能创建控件类,可以将它们的实例添加到表单中 。 例如移动记录指针的命令按钮类,表单关闭按钮类,帮助按钮类等 。
● 赋予应用程序统一的外观和风格:例如创建了具有独特外观的文本框类,便可在应用程序所有需要文本框的地方都使用这个类 。
11.4.1 创建用户定义类下面通过一个例子来介绍创建用户定义类的步骤 。
[例 11-1] 使用类设计器创建一个用户定义类,类名为,记录指针移动类,,基类为命令按钮组,存储到
d:\vfp6\commandgroup1.vcx类库文件中 。
⑴ 选择,新建,,或者在,项目管理器,窗口的
,类,选项卡中单击,新建,按钮,在弹出的,新建,
对话框中选择,类,单选按钮;然后单击新文件按钮,
打开,新建类,对话框 。 如图 11-2所示 。
11.4.1 创建用户定义类图 11-2,新建类”对话框
11.4.1 创建用户定义类
⑵ 指定新建类所需的类库,基类与类名 。
其中,,类名,文本框用于指定类名,新生成的类是基类的子类;,派生于,下拉列表框用于指定新生成类的基类;,存储于,文本框用于指定新类库名或已有类库的名字,类库名可包含路径,若未指出路径表示使用默认路径 。
⑶ 指定各项内容后,单击,确认,按钮,
打开如图 11-3所示的,类设计器,窗口 。
11.4.1 创建用户定义类图 11-3 类设计器窗口
11.4.1 创建用户定义类
⑷ 通过表单的属性窗口设置其按钮个数及相应标题,并设置事件代码 。 设计好的命令按钮组类如图 11-4所示 。
图 11-4,记录指针移动类”窗口
11.4.2 将类添加到工具栏用户定义类完成后,即可以将其添加到表单控件工具栏中,然后通过使用该工具栏中的,查看类,按钮来打开定义的类 。
[例 11-2] 将创建的,记录指针移动类,添加到表单控件工具栏中,并通过它在表单上创建一个记录指针移动命令按钮组 。
⑴ 选择,新建,,在打开的对话框中选择,表单,选项,然后单击,新建,按钮,新建一个表单 。
图 11-5 新建的表单设计窗口
11.4.2 将类添加到工具栏
⑵ 在,表单控件,工具栏上单击 ( 查看类 ) 按钮,在弹出的菜单中选择,添加,,在打开的,打开,对话框中指定要添加的可视类库的文件名 。
图 11-6 在“打开”对话框中指定类文件名
11.4.2 将类添加到工具栏
⑶ 单击,打开,按钮,则打开的表单控件工具栏如图 11-7所示 。
新添加的 Commandgroup类图 11-7 新添加类按钮
11.4.2 将类添加到工具栏
⑷ 单击新添加类按钮选中它,在表单中单击添加命令按钮组,结果如图 11-8所示 。
图 11-8 添加命令按钮组的表单
11.4.3 类的编辑在 Visual FoxPro 6.0中,用户不仅可以修改用户定义类,而且可以删除类库中的类,或删除类库 。
1.修改用户定义类若要为用户定义类设置属性,编写事件代码或方法程序代码,或者是创建新的属性或方法程序,都必须打开类设计器来实现 。 要打开类设计器,只要打开一个可视类库,并选择其中的一个类即可 。
[例 11-3] 修改 [例 11-1]所设计的命令按钮组类,
要求为表单定义的基于该类的每个按钮均有提示功能 。
11.4.3 类的编辑
⑴ 选择,打开,,在打开的对话框的文件类型列表框中选择,可视类库,( *.vcx),从中选择存在的 Commandgroup1类库名,单击,确认,按钮 。
⑵ 在打开的,打开,对话框中右边的列表框中选择要修改的类名 。
图 11-9 选择要修改的类名
11.4.3 类的编辑
⑶ 单击,打开,按钮,打开,类设计器,窗口,
选择要设置提示内容的按钮,打开,属性,窗口,将其 ToolTipText( 显示提示内容 ) 属性设置成所要显示的文本内容 。
⑷ 用同样方法设置其它按钮的提示文本后,关闭
,类设计器,窗口,选择保存修改即可 。
11.4.3 类的编辑图 11-10 设置按钮的提示文本
11.4.3 类的编辑
2.删除类库中的一个类要删除类库中的类,可以使用下述的两种方法之一 。
● 使用 REMOVE CLASS命令,REMOVE CLASS
<类名 > OF <类库名 >
● 在,项目管理器,的,类,选项卡中选择指定类库中的一个类,单击,移去,按钮即可 。
3.删除类库要删除类库只要将指定的,vcx类库文件删除即可 。
或者在,项目管理器,的,类,选项卡中选中要删除的类库后,再单击,移去,按钮即可 。
习题
1,选择题
⑴ 现实世界中的每一个事件都是一个对象,任何对象都有自己的属性和方法 。 对属性的描述正确的是 。
A.属性是对象所具有的内部特征
B.属性就是对象所具有的固有特征,一般用各种类型的数据来表示
C.属性只是对象所具有的外部特征
D.属性就是对象所具有的固有方法
⑵ 下面关于,类,的描述,错误的是 。
A.一个类包含了相似的有关对象的特征和行为方法
B.类只是实例对象的抽象
C.类并不实行任何行为操作,它仅仅表明该怎样做
D.类可以按所定义的属性,事件和方法进行实际的行为操作习题
⑶ Visual FoxPro 6.0系统预设计了一批各具特征的可重复调用的高度程序化的程序段,这些程序段被称为 。
A.基类 B.类 C.对象 D.控件
⑷ 面向对象程序设计就是将 处理由面向过程转为面向对象,并采用事件驱动其执行过程的程序设计方法 。
A.文件 B.对象 C.程序 D.数据
⑸ 表示当前对象 。
A.This B.ThisForm C.ThisFormSet D.Parent
习题
2,填空题
⑴ OOP的中文含义是 。
⑵ 对象具有属性,事件和 三大要素 。
⑶ 类具有,和 的特征,这就大大加强了代码的可重用性 。
⑷ 类是对象的集合,它包含了相似的有关对象的特征和行为方法,而 是类的实例 。
⑸ Visual FoxPro 6.0的基类可分为 和 两大类 。
参考答案
1,选择题
⑴ B ⑵ D ⑶ A ⑷ D ⑸ A
2,填空题
⑴ 面向对象程序设计
⑵ 方法程序
⑶ 封装性,层次性,继承性
⑷ 对象
⑸ 容器类、控件类