1、2022-8-9第7章 面向对象程序设计7.1 对象7.2 类2022-8-9 Visual FoxPro 6.0在支持传统的面向过程编程方在支持传统的面向过程编程方法的基础上,全面引入面向对象的程序设计方法的基础上,全面引入面向对象的程序设计方法。法。使得用户通过面向对象的方法,可以设计出更使得用户通过面向对象的方法,可以设计出更加美观的应用程序界面,开发出真正的关系数加美观的应用程序界面,开发出真正的关系数据库应用程序。据库应用程序。面向对象程序设计根本性地改变了早期面向对象程序设计根本性地改变了早期FoxPro应用程序面向过程的开发方式,将重点放在了应用程序面向过程的开发方式,将重点放在
2、了对象之间的联系上,而不是具体实现的细节。对象之间的联系上,而不是具体实现的细节。面向对象程序设计通过代码重用和继承的方式,面向对象程序设计通过代码重用和继承的方式,使用户在设计程序时不再做大量的重复劳动,使用户在设计程序时不再做大量的重复劳动,且将对象的细节隐藏起来,让用户将注意力集且将对象的细节隐藏起来,让用户将注意力集中在对象与系统其他部分的联系上,这是面向中在对象与系统其他部分的联系上,这是面向过程的程序设计方法所不能做到的。过程的程序设计方法所不能做到的。2022-8-97.1 对象对象 7.1.1 对象的属性对象的属性 7.1.2 事件事件 7.1.3 方法程序方法程序 7.1.4
3、 数据环境数据环境 7.1.5 对象的引用对象的引用 2022-8-9 客观世界里的任何实体都可以被看作是对象。客观世界里的任何实体都可以被看作是对象。对象可以是具体的物,也可以指某些概念。对象可以是具体的物,也可以指某些概念。任何对象都具有自己的特征和行为。任何对象都具有自己的特征和行为。在面向对象程序设计中,所有事物都可以被在面向对象程序设计中,所有事物都可以被抽象为对象,例如表单上的命令铵钮是对象,抽象为对象,例如表单上的命令铵钮是对象,表单本身也是一个对象。表单本身也是一个对象。在在VFP中,又将对象分为控件对象和容器对中,又将对象分为控件对象和容器对象两种。象两种。对象建立以后,其操
4、作就可以通过与对象有对象建立以后,其操作就可以通过与对象有关的属性、事件和方法来描述。关的属性、事件和方法来描述。2022-8-97.1.1 对象的属性对象的属性 对象的属性即对象的特征、性质,例如当描对象的属性即对象的特征、性质,例如当描述一个命令按钮时,可以用它所在位置、尺述一个命令按钮时,可以用它所在位置、尺寸大小、颜色及它上面显示的文字的字体、寸大小、颜色及它上面显示的文字的字体、字号等特征来形容,这些特征都可用属性来字号等特征来形容,这些特征都可用属性来表示。表示。在在VFP中,不同对象的属性是不相同的,但中,不同对象的属性是不相同的,但有些属性(如名称、标题等属性)是很多对有些属性
5、(如名称、标题等属性)是很多对象都具有的。象都具有的。2022-8-91对象的属性窗口对象的属性窗口 表单设计器打开后,只要选择【显示】菜单中的【属性】命令或选择“表单”快捷菜单中的【属性】命令,即可打开如图7.1所示的“属性”窗口。该窗口能显示当前对象的属性、事件和方法程序,并允许用户更改属性、定义事件代码和修改方法程序。属性窗口自上至下依次包括对象组合框、选项卡、属性设置框、属性列表和属性说明5个部分,各部分功能如下:2022-8-9(1)对象组合框:)对象组合框:包括当前表单、表单集及全部控件的列包括当前表单、表单集及全部控件的列表,用户可在列表中选择表单或控件,表,用户可在列表中选择表
6、单或控件,这和在表单窗口选择对象的效果是一致这和在表单窗口选择对象的效果是一致的。多个控件之间在这里是分多级显示,的。多个控件之间在这里是分多级显示,以体现它们之间的父与子的关系。以体现它们之间的父与子的关系。2022-8-9(2)选项卡:)选项卡:共有共有5个,分别用来显示对象的属性、事件、方法程序个,分别用来显示对象的属性、事件、方法程序等选项,选项按字母顺序排列。等选项,选项按字母顺序排列。各选项卡的作用如下:各选项卡的作用如下:“全部全部”选项卡:选项卡:列出全部属性、事件和方法程序。列出全部属性、事件和方法程序。“数据数据”选项卡:选项卡:列出显示或操纵数据的属性。列出显示或操纵数据
7、的属性。“方法程序方法程序”选项卡:选项卡:列出方法程序与事件。方法程序列出方法程序与事件。方法程序与事件都是对象的程序,区别在于,带与事件都是对象的程序,区别在于,带Event后缀的选后缀的选项是事件,否则就是方法程序。项是事件,否则就是方法程序。“布局布局”选项卡:选项卡:列出位置、大小等属性。列出位置、大小等属性。“其他其他”选项卡:选项卡:列出类信息和用户自定义属性。列出类信息和用户自定义属性。2022-8-9除除“全部全部”选项卡外的选项卡外的4个选项卡都是分类选项卡,用户既可在全部个选项卡都是分类选项卡,用户既可在全部选项卡中查找所要的选项,也可在分类选项卡中查找选项。选项卡中查找
8、所要的选项,也可在分类选项卡中查找选项。2022-8-9(3)属性设置框:)属性设置框:可以是文本框或组合框,用于更改或设置对象的属可以是文本框或组合框,用于更改或设置对象的属性值。性值。在属性设置框左侧有在属性设置框左侧有3个按钮的功能如下:个按钮的功能如下:确认按钮确认按钮:在属性设置文本框中输入属性值后,在属性设置文本框中输入属性值后,单击此按钮可确认对属性的更改,与按回车键等效。单击此按钮可确认对属性的更改,与按回车键等效。取消按钮取消按钮:当属性设置文本框输入属性值,但还当属性设置文本框输入属性值,但还没有确认时,单击此按钮可取消刚才的输入值,并没有确认时,单击此按钮可取消刚才的输入
9、值,并恢复以前的值。恢复以前的值。函数按钮函数按钮fx:单击此按钮可打开表达式生成器,用单击此按钮可打开表达式生成器,用来设置一个表达式,该表达式的值将作为属性值。来设置一个表达式,该表达式的值将作为属性值。对于用表达式设置的属性,在属性值之前将自动插对于用表达式设置的属性,在属性值之前将自动插入一个等号。入一个等号。2022-8-9(4)属性列表:)属性列表:属性列表的每一行包含两列内容,即名字列属性列表的每一行包含两列内容,即名字列和值列。和值列。用户选择某属性后即可更改属性值。更改过用户选择某属性后即可更改属性值。更改过的属性仍可恢复默认值,只要选择该属性后的属性仍可恢复默认值,只要选择
10、该属性后右单击该属性,在弹出的快捷菜单中选择右单击该属性,在弹出的快捷菜单中选择【重置为默认值】命令即可。【重置为默认值】命令即可。需要注意的是,在属性值列表中,以斜体字需要注意的是,在属性值列表中,以斜体字显示的选项表表示只读,用户不能修改,用显示的选项表表示只读,用户不能修改,用户修改过的选项将以黑体显示。户修改过的选项将以黑体显示。2022-8-9(5)属性说明信息:)属性说明信息:在属性列表中选择某属性、事件或方法在属性列表中选择某属性、事件或方法程序后,属性窗口的底部即简要地显示程序后,属性窗口的底部即简要地显示它的意义。它的意义。2022-8-92常用的对象属性常用的对象属性 不同
11、的对象所具有的属性也是不相同的,这也可从属性的不同的对象所具有的属性也是不相同的,这也可从属性的定义中体现出来,但是一些对象会有一些共性,表定义中体现出来,但是一些对象会有一些共性,表7.1列出列出了一些对象共有而且常用的属性。了一些对象共有而且常用的属性。2022-8-9属性说 明应用于Caption设置对象的标题表单、标签、命令按钮等Name设置对象的名字(在程序中引用)任何对象Value设置控件当前状态(取值)文本框、列表框等ForeColor设置对象中的前景色(文本和图形颜色)表单、标签、文本框、命令按钮等BackColor设置对象内部的背景色表单、标签、文本框、列表框等BackSty
12、le设置对象背景是否透明标签、文本框、图像等AutoSize控件是否根据正文自动调整大小标签框、单选按钮组、复选框等Height指定对象在屏幕上的高度标签框、文本框等Width指定对象在屏幕上的宽度标签框、文本框等Top指定相对父对象最顶端所在的位置标签框、文本框等Left指定相对父对象的左边界标签框、文本框等FontName指定对象显示文本的字体标签框、文本框等FontSize指定对象显示文本的字号标签框、文本框等FontBold设置对象显示文本是否粗体标签框、文本框等Alignment控件正文水平对齐方式标签框、文本框、复选框等AlwaysOnTop是否处于其他窗口之上表单AutoCent
13、er是否在VFP主窗口内自动居中表单Closable标题栏中关闭按钮是否有效表单Controlbox是否取消标题栏所有按钮表单、工具栏MaxButton是否有最大化按钮表单MinButton是否有最小化按钮表单Movable运行时表单能否移动表单WindowState设置运行时是最大化或最小化表单WindowType用于控制表单是非模式表单还是模式表单表单AutoCloseTables表单释放时是否关闭表或视图,默认为.T.表单AutoOpenTables表单加载时是否关闭表或视图,默认为.T.表单ShowTips当鼠标放在控件上时确定是否显示工具提示表单、工具栏ShowWindow指定表单是
14、一个顶层表单还是一个子表单表单Enabled指定控件是否可用表单、命令按钮等Visible指定控件是否可见表单、命令按钮等2022-8-97.1.2 事件事件 事件是指可能会发生在对象上的事情,也事件是指可能会发生在对象上的事情,也即对对象所作的操作(或者系统对某个对即对对象所作的操作(或者系统对某个对象的操作)。象的操作)。如按钮被单击,对象被拖动、被改变大小、如按钮被单击,对象被拖动、被改变大小、被双击等。被双击等。一个对象可以有多个事件,但是每个事件一个对象可以有多个事件,但是每个事件都是由系统预先规定的。都是由系统预先规定的。一个事件对应于一个程序,即事件过程。一个事件对应于一个程序,
15、即事件过程。2022-8-91事件触发方式事件触发方式 事件一旦被触发,系统马上要去执行与该事件对事件一旦被触发,系统马上要去执行与该事件对应的过程。等事件过程执行结束后,系统又处于应的过程。等事件过程执行结束后,系统又处于等待某事件发生的状态。即事件包括事件过程和等待某事件发生的状态。即事件包括事件过程和事件触发方式两个方面。事件过程的代码应该事事件触发方式两个方面。事件过程的代码应该事先编写好。从表先编写好。从表7.2列出的列出的VFP系统常见的事件可系统常见的事件可看出事件的触发方式分三种:看出事件的触发方式分三种:(1)用户触发:)用户触发:如单击命令按钮等。如单击命令按钮等。(2)系
16、统触发:)系统触发:如计时器事件,将会自动按设如计时器事件,将会自动按设定的时间间隔发生。定的时间间隔发生。(3)代码触发:)代码触发:用代码来调用事件过程。用代码来调用事件过程。2022-8-9常用事件常用事件 事事 件件发生时机发生时机事事 件件发生时机发生时机Click单击鼠标左键时单击鼠标左键时GotFocus对象获得焦点时对象获得焦点时DblClick双击鼠标左键时双击鼠标左键时Activate对象激活时对象激活时DragDrop鼠标拖放时鼠标拖放时Init创建对象时创建对象时RightClick单击鼠标右键时单击鼠标右键时Load表单被装入内存时表单被装入内存时MouseUp释放鼠
17、标时释放鼠标时Unload释放对象时释放对象时MouseDown按下鼠标键时按下鼠标键时InteractiveChange改变控件的值时改变控件的值时KeyPress按下并释放某键盘时按下并释放某键盘时Resize调整对象大小时调整对象大小时DownClick单击控件的上下箭头时单击控件的上下箭头时Timer在设置的时间间隔内发在设置的时间间隔内发生生Destroy释放一个对象时释放一个对象时Valid当一个控件失去聚焦时当一个控件失去聚焦时2022-8-92为事件编写代码为事件编写代码事件代码需在代码编辑窗口中编写,打开某对象代码编辑窗口的方法有多事件代码需在代码编辑窗口中编写,打开某对象代
18、码编辑窗口的方法有多种:种:(1)双击该对象。)双击该对象。(2)选择对象快捷菜单中的【代码】命令。)选择对象快捷菜单中的【代码】命令。(3)选中对象,选择【显示】菜单的【代码】命令。)选中对象,选择【显示】菜单的【代码】命令。以上方法均可弹出图以上方法均可弹出图7.2所示的代码编辑窗口。所示的代码编辑窗口。2022-8-97.1.3 方法程序方法程序 方法程序又称方法,是指对象所固有完成某种任务的功方法程序又称方法,是指对象所固有完成某种任务的功能,它是能,它是VFP为对象内定的通用过程,用户可以在需要为对象内定的通用过程,用户可以在需要的时候调用,由于方法的代码由的时候调用,由于方法的代码
19、由VFP定义,所以对用户定义,所以对用户是不可见的。是不可见的。方法程序与事件有相似之处,都是为了完成某个任务,方法程序与事件有相似之处,都是为了完成某个任务,但同一个事件可完成不同任务取决于用户所编写的代码,但同一个事件可完成不同任务取决于用户所编写的代码,而方法则是固定的,任何时候调用都是完成同一个任务。而方法则是固定的,任何时候调用都是完成同一个任务。所以其中的代码也不需要再编写。所以其中的代码也不需要再编写。表表7.3列出了常用的方法。列出了常用的方法。2022-8-9方法程序方法程序功功 能能Cls清除表单中的图形和文本清除表单中的图形和文本Clear清除组合框和列表框控件中的内容清
20、除组合框和列表框控件中的内容Show把表单或表单集的把表单或表单集的Visible属性设置为属性设置为.T.,并使表单成为活动,并使表单成为活动对象对象Hide通过把通过把Visible属性设置为属性设置为.F.,隐藏表单、表单集或工具栏,隐藏表单、表单集或工具栏Move用于移动一个对象用于移动一个对象SetFocus为一个控件指定焦点,使其成为活动对象为一个控件指定焦点,使其成为活动对象Box在表单对象上画一个矩形在表单对象上画一个矩形Circle在表单对象上画一个圆或椭圆在表单对象上画一个圆或椭圆Line在表单对象上绘制一条线在表单对象上绘制一条线Print在表单对象上打印一个字符串在表单
21、对象上打印一个字符串AddItem给组合框或列表框控件增加一个新数据项给组合框或列表框控件增加一个新数据项Refresh重画表单或控件,并刷新所有的值重画表单或控件,并刷新所有的值Release从内存中释放表单集或表单从内存中释放表单集或表单Quit结束一个结束一个VFP实例实例2022-8-97.1.4 数据环境数据环境 1数据环境的概念数据环境的概念 数据环境是指在打开或修改一个表单或报表时需数据环境是指在打开或修改一个表单或报表时需要使用的数据源,包括打开的全部表、视图和关要使用的数据源,包括打开的全部表、视图和关系。系。数据环境及其中的表与视图都是对象。数据环境数据环境及其中的表与视图
22、都是对象。数据环境一旦建立,当打开或运行表单时,其中的表或视一旦建立,当打开或运行表单时,其中的表或视图即自动打开,与数据环境是否显示无关;而在图即自动打开,与数据环境是否显示无关;而在关闭或释放表单时,表或视图也能随之关闭。关闭或释放表单时,表或视图也能随之关闭。2022-8-92数据环境设计器的使用数据环境设计器的使用 数据环境设计器可用来可视化的创建或修改数据环境,可以从数据环境设计器可用来可视化的创建或修改数据环境,可以从表单的快捷菜单中选择【数据环境】命令,或者选择【显示】表单的快捷菜单中选择【数据环境】命令,或者选择【显示】菜单的【数据环境】命令均可打开如图菜单的【数据环境】命令均
23、可打开如图7.3所示的所示的“数据环境数据环境”设计器,在弹出的对话框中添加要使用的表或视图。设计器,在弹出的对话框中添加要使用的表或视图。2022-8-93数据环境菜单数据环境菜单 当数据环境设计器处于打开状态时,会出现当数据环境设计器处于打开状态时,会出现数据环境菜单,菜单中提供的几个命令具有数据环境菜单,菜单中提供的几个命令具有查看和修改数据环境的功能,各命令选项功查看和修改数据环境的功能,各命令选项功能如下:能如下:添加:添加:用于向数据环境添加表或视图。用于向数据环境添加表或视图。移去:移去:移去选择的表或视图。移去选择的表或视图。浏览:浏览:浏览选择的表或视图。浏览选择的表或视图。
24、执行表单:执行表单:运行表单。运行表单。2022-8-97.1.5 对象的引用对象的引用 在面向对象的程序设计中常常要引用对象,在面向对象的程序设计中常常要引用对象,或引用对象的属性、事件与调用方法程序。或引用对象的属性、事件与调用方法程序。在引用对象时要遵循一定的规则,主要包在引用对象时要遵循一定的规则,主要包括以下括以下4个方面:个方面:(1)在程序代码中一般用以下关键字开头:)在程序代码中一般用以下关键字开头:ThisFormSet&表示当前表单集表示当前表单集 ThisForm&表示当前表单表示当前表单 This&表示当前对象表示当前对象2022-8-9(2)引用格式 一般在引用关键字
25、后跟一个点号,表示从属关系,再写出被引用对象或者对象的属性、事件或方法程序。例如:ThisForm.Label1.Caption=标签标题 ThisForm.cls2022-8-9(3)允许多级引用)允许多级引用 在应用程序中,多个对象之间有多级的从属关在应用程序中,多个对象之间有多级的从属关系,引用时可提供对象的完整容器层次来引用系,引用时可提供对象的完整容器层次来引用(称绝对引用),也可从当前层次来引用(称(称绝对引用),也可从当前层次来引用(称相对引用)。以下是常用的引用格式:相对引用)。以下是常用的引用格式:ThisFormSet.属性名属性名|事件事件|方法程序方法程序|对象名对象名
26、 ThisForm.属性名属性名|事件事件|方法程序方法程序|对象名对象名 This.属性名属性名|事件事件|方法程序方法程序|对象名对象名 对象名对象名.属性名属性名|事件事件|方法程序方法程序2022-8-9(4)父调用)父调用 父调用即控件引用包含它的容器控件。父调用即控件引用包含它的容器控件。例如:例如:This.Parent.BackColor=RGB(192,0,0)&将本对象的父对象的背景色设置将本对象的父对象的背景色设置为暗红色为暗红色2022-8-97.2 类类 7.2.1 类的概念类的概念 7.2.2 自定义类自定义类 7.2.3 创建工具栏创建工具栏 2022-8-97.
27、2.1 类的概念类的概念 类是一组具有相同特性的对象的抽象的类是一组具有相同特性的对象的抽象的定义。定义。它将属性和方法统一起来,把具有相似它将属性和方法统一起来,把具有相似特征和行为的对象形成一个结构。特征和行为的对象形成一个结构。2022-8-91类与对象类与对象 类和对象的关系密切,但并不相同。类包含了有关类和对象的关系密切,但并不相同。类包含了有关对象的特征和行为信息,它是对象的蓝图和框架。对象的特征和行为信息,它是对象的蓝图和框架。类是定义了对象特征以及对象外观和行为的模板。类是定义了对象特征以及对象外观和行为的模板。比如,在表单控件工具栏中,每个按钮都代表一个比如,在表单控件工具栏
28、中,每个按钮都代表一个类,用其中某个按钮在表单上创建的一个控件就是类,用其中某个按钮在表单上创建的一个控件就是一个对象。类与对象存在如下关系:一个对象。类与对象存在如下关系:(1)类是对象的定义。类规定并提供了对象具有)类是对象的定义。类规定并提供了对象具有的属性、事件和方法程序。的属性、事件和方法程序。(2)对象通过类而产生。)对象通过类而产生。(3)对象是类的一个实例。)对象是类的一个实例。2022-8-92基类与子类基类与子类(1)基类)基类 基类是基类是VFP系统预先定义的类,在如图系统预先定义的类,在如图7.4所示所示的的“新建类新建类”对话框的对话框的“派生于派生于”下拉列表框下拉
29、列表框中,包含了全部基类,初始的表单控件工具栏中,包含了全部基类,初始的表单控件工具栏中包含的类也是基类。中包含的类也是基类。2022-8-9(2)子类)子类 子类是指以某个类的定义为基础创建的新类,子类是指以某个类的定义为基础创建的新类,子类所基于的类称为父类。子类所基于的类称为父类。比如若要从基类创建出新类时,那么基类就比如若要从基类创建出新类时,那么基类就是父类,新建类即为子类。是父类,新建类即为子类。子类将继承父类的全部特征,包括对父类的子类将继承父类的全部特征,包括对父类的所做的修改。所做的修改。2022-8-9(3)用户自定义类)用户自定义类 用户可以从基类派生出子类,即用户自定义
30、类;用户可以从基类派生出子类,即用户自定义类;VFP还允许从用户定义类派生出子类,也就是还允许从用户定义类派生出子类,也就是说用户自定义类可以是子类,也可以是父类。说用户自定义类可以是子类,也可以是父类。用户可以为用户自定义类设置属性、编写代码用户可以为用户自定义类设置属性、编写代码与方法程序,也可创建新的属性和方法程序。与方法程序,也可创建新的属性和方法程序。用户还可以将自己定义的类添加到表单控件工用户还可以将自己定义的类添加到表单控件工具栏中。具栏中。2022-8-9(4)容器类和控件类)容器类和控件类 VFP提供了两大基类:容器类和控件类。提供了两大基类:容器类和控件类。容器类可以容纳别
31、的对象。如表单类中容器类可以容纳别的对象。如表单类中可以放命令按钮、复选框按钮、文本框可以放命令按钮、复选框按钮、文本框控件等,因此表单可以看成一个容器类。控件等,因此表单可以看成一个容器类。控件类是可以包含在容器类中并由用户控件类是可以包含在容器类中并由用户派生的派生的VFP基类。基类。2022-8-9(5)类库)类库 类库可用来存储以可视方式设计的类,类库可用来存储以可视方式设计的类,其文件扩展名为其文件扩展名为.vcx。一个类库通常可容纳多个子类,这些子一个类库通常可容纳多个子类,这些子类允许由不同的基类派生。类允许由不同的基类派生。2022-8-93类的特征类的特征类有如下特征,这些特
32、征对提高代码的可重用性和易维护性有很好用处。类有如下特征,这些特征对提高代码的可重用性和易维护性有很好用处。(1)封装性)封装性封装的目的就是信息隐藏,把对象的内部代码隐藏起来。用户只需知道封装的目的就是信息隐藏,把对象的内部代码隐藏起来。用户只需知道该对象具有什么功能以及如何使用该对象,而不必了解这些功能是如何该对象具有什么功能以及如何使用该对象,而不必了解这些功能是如何实现的。实现的。封装特性使得对代码的修改和维护变得比以前更容易了,同时还可以很封装特性使得对代码的修改和维护变得比以前更容易了,同时还可以很方便地利用提供的基本类库来实现强大的功能。方便地利用提供的基本类库来实现强大的功能。
33、(2)继承性)继承性继承是面向对象程序设计技术中的一个重要的技术。它用来描述类之间继承是面向对象程序设计技术中的一个重要的技术。它用来描述类之间的共同属性,减少了相似类之间的重复说明;它体现了一般化及特殊化的共同属性,减少了相似类之间的重复说明;它体现了一般化及特殊化的原则。的原则。在面向对象程序设计中,继承用以说明子类延用父类特征的能力。如果在面向对象程序设计中,继承用以说明子类延用父类特征的能力。如果父类特征发生改变,则子类将继承这些新特征。父类特征发生改变,则子类将继承这些新特征。(3)多态性)多态性多态性是指不同的对象接收到相同的消息时,可以作出完全不同的解释,多态性是指不同的对象接收
34、到相同的消息时,可以作出完全不同的解释,进而生产完全不同的行为。利用多态性,应用程序可以发送一般形式的进而生产完全不同的行为。利用多态性,应用程序可以发送一般形式的消息,而将所有实现的细节留给接收消息的对象来解决。消息,而将所有实现的细节留给接收消息的对象来解决。2022-8-97.2.2 自定义类自定义类 VFP最强大的功能之一就是支持创建在应用最强大的功能之一就是支持创建在应用程序中重复使用的类,用户定义的类可添加程序中重复使用的类,用户定义的类可添加到表单控件工具栏中。用户自定义的类通常到表单控件工具栏中。用户自定义的类通常有以下功能:有以下功能:封装通用功能:为通用功能创建自定义类,封
35、装通用功能:为通用功能创建自定义类,可以将它们的实例添加到表单中。例如表单可以将它们的实例添加到表单中。例如表单关闭按钮类、帮助按钮类等。关闭按钮类、帮助按钮类等。赋予应用程序统一的外观和风格:比如创建赋予应用程序统一的外观和风格:比如创建了独特外观的文本框类,便可在应用程序所了独特外观的文本框类,便可在应用程序所有需要文本框的地方都使用这个类。有需要文本框的地方都使用这个类。2022-8-91创建用户自定义类创建用户自定义类 下面通过一个实例讲述创建用户自定义类的步骤。下面通过一个实例讲述创建用户自定义类的步骤。【例【例7.1】使用类设计器创建一个用户自定义类,类名为】使用类设计器创建一个用
36、户自定义类,类名为“记录指针移动类记录指针移动类”。基类为命令按钮组,存储到。基类为命令按钮组,存储到c:P r o g r a m F i l e s M i c r o s o f t V i s u a l Studiovfp98commandgroup1.vcx类库中。类库中。操作步骤如下:操作步骤如下:(1)执行【文件】菜单中的【新建】命令,弹出)执行【文件】菜单中的【新建】命令,弹出“新建新建”对话框,选择对话框,选择“类类”单选按钮,弹出如图单选按钮,弹出如图7.5所示的所示的“新建新建类类”对话框;对话框;2022-8-9(2)在)在“新建类新建类”对话框中指定新建类的类库、基
37、类与类名。对话框中指定新建类的类库、基类与类名。在“类名”文本框用于指定类名;“派生于”下拉列表框用于指定新生成类的基类;“存储于”文本框用于指定新类库名或已有类库的名字,类库名可包含路径,若未指出路径表示使用默认路径。2022-8-9(3)指定各项内容后,单击【确定】按钮,)指定各项内容后,单击【确定】按钮,打开如图打开如图7.6所示的所示的“类设计器类设计器”窗口。窗口。2022-8-9(4)通过表单设计器控件工具栏添加相应的控件,设计)通过表单设计器控件工具栏添加相应的控件,设计相应的属性与事件代码。本例中添加五个命令按钮。相应的属性与事件代码。本例中添加五个命令按钮。(5)属性设置:)
38、属性设置:“记录指针移动类记录指针移动类”的的ButtonCount属性值设置为:属性值设置为:5 五个命令按钮的标题五个命令按钮的标题Caption属性分别设置为:第一个记录、属性分别设置为:第一个记录、前一个记录、后一个记录、最后一个记录、退出。如图前一个记录、后一个记录、最后一个记录、退出。如图7.7所示。所示。2022-8-9“第一个记录第一个记录”按钮按钮Command1的的Click事件代码事件代码为:为:go top This.Parent.Command2.Enabled=.F.This.Parent.Command3.Enabled=.T.This.Parent.Comman
39、d4.Enabled=.T.This.Parent.Command5.Enabled=.T.ThisForm.Refresh2022-8-9“前一个记录前一个记录”按钮按钮Command2的的Click事件代码事件代码为:为:skip 1 if bof()=MessageBox(已是第一个记录!已是第一个记录!,48,信息窗口信息窗口)This.Enabled=.F.This.Parent.Command1.Enabled=.F.Else This.Enabled=.T.This.Parent.Command1.Enabled=.T.Endif This.Parent.Command3.Ena
40、bled=.T.This.Parent.Command4.Enabled=.T.This.Parent.Command5.Enabled=.T.ThisForm.Refresh2022-8-9“后一个记录后一个记录”按钮按钮Command3的的Click事件代码事件代码为:为:skip if eof()=MessageBox(已是最后一个记录!已是最后一个记录!,48,信息窗口信息窗口)skip-1 This.Enabled=.F.This.Parent.Command4.Enabled=.F.Else This.Enabled=.T.This.Parent.Command4.Enabled=
41、.T.Endif This.Parent.Command1.Enabled=.T.This.Parent.Command2.Enabled=.T.This.Parent.Command5.Enabled=.T.ThisForm.Refresh2022-8-9 “最后一个记录最后一个记录”按钮按钮Command4的的Click事件代码为:事件代码为:go bottom This.Parent.Command1.Enabled=.T.This.Parent.Command2.Enabled=.T.This.Parent.Command3.Enabled=.F.This.Parent.Command
42、5.Enabled=.T.ThisForm.Refresh2022-8-9“退出”按钮Command5的Click事件代码为:ThisForm.Release2022-8-92将类添加到工具栏将类添加到工具栏 用户自定义类完成后,即可以将其添加到表单控件工具栏中,然后通过使用该工具栏中的“查看类”按钮来打开定义的类。2022-8-9操作步骤:(1)选择【文件】菜单中的【新建】命令,打开“新建”对话框选择“表单”单选按钮,单击【新建文件】按钮,新建一表单,如图7.8所示。2022-8-9(2)在“表单控件”工具栏上单击【查看类】按钮,在弹出的菜单中选择【添加】命令,然后在弹出的“打开”对话框中指
43、定要添加的可视类库的文件名,如图7.9所示。单击【打开】按钮,则打开表单控件工具栏如图7.10所示。2022-8-9(3)单击新添加的“记录指针移动类”按钮,在表单中创建“记录指针移动类1”控件。结果如图7.11所示。2022-8-9新添加类按钮2022-8-93.类的编辑类的编辑 在在VFP中,用户可以修改用户自定义的类,也中,用户可以修改用户自定义的类,也可以删除类库中的类,或删除类库。可以删除类库中的类,或删除类库。(1)修改用户自定义的类修改用户自定义的类 若要为用户自定义的类设置属性,编写事件代若要为用户自定义的类设置属性,编写事件代码或方法程序代码,或者是创建新的属性或方码或方法程
44、序代码,或者是创建新的属性或方法程序,都必须打开类设计器来实现。要打开法程序,都必须打开类设计器来实现。要打开类设计器,只要打开一个可视类库,并选择其类设计器,只要打开一个可视类库,并选择其中的一个类即可。中的一个类即可。2022-8-9【例7.3】修改【例7.1】中创建的“记录指针移动类”。操作步骤如下:操作步骤如下:执行【文件】菜单的【打开】命令,在执行【文件】菜单的【打开】命令,在“打开打开”对话框的文件类型列表框中选择可视类,从中选择对话框的文件类型列表框中选择可视类,从中选择类库名类库名Commandgroup1.vcx,单击【确定】按钮。,单击【确定】按钮。在弹出的在弹出的“打开打
45、开”对话框中右边的列表框中选择对话框中右边的列表框中选择要修改的类要修改的类“记录指针移动类记录指针移动类”,单击【打开】按,单击【打开】按钮。钮。在弹出的在弹出的“类设计器类设计器”窗口中,选择要修改内容窗口中,选择要修改内容的按钮后,利用属性窗口修改相应的内容。的按钮后,利用属性窗口修改相应的内容。关闭类设计器窗口,选择保存修改。关闭类设计器窗口,选择保存修改。2022-8-9(2)删除类库中的一个类)删除类库中的一个类 一个类库文件中可以包含多个类,要删一个类库文件中可以包含多个类,要删除类库中的某个类,可以用以下方法:除类库中的某个类,可以用以下方法:使用命令:使用命令:REMOVE
46、CLASS OF 在项目管理器的在项目管理器的“类类”选项卡中选择指选项卡中选择指定类库中的一个类,单击【移去】按钮定类库中的一个类,单击【移去】按钮即可。即可。2022-8-9(3)删除类库 要删除类库只要将指定的类库文件删除即可。2022-8-94为字段设置类为字段设置类 要在表单上创建控件有两种方法,一种是直接在要在表单上创建控件有两种方法,一种是直接在表单控件工具栏上选择控件后,在表单上单击即表单控件工具栏上选择控件后,在表单上单击即可。可。另一种方法就是在数据环境中拖动有关的字段到另一种方法就是在数据环境中拖动有关的字段到表单设计器窗口来产生控件。表单设计器窗口来产生控件。数据库表的
47、每一个字段从数据环境拖动到表单后数据库表的每一个字段从数据环境拖动到表单后会自动生成一个控件,如将会自动生成一个控件,如将XSK表的姓名字段拖表的姓名字段拖动到表单上会默认产生一个文本框,除使用默认动到表单上会默认产生一个文本框,除使用默认控件外,用户还可以通过设置产生其它控件。这控件外,用户还可以通过设置产生其它控件。这些设置是在数据库些设置是在数据库“表设计器表设计器”窗口通过为字段窗口通过为字段指定类库和类实现的。指定类库和类实现的。2022-8-9【例【例7.4】设计】设计XSK表的结构,使得将表的结构,使得将XSK表的表的奖学金字段拖动到表单上后产生微调控件。奖学金字段拖动到表单上后
48、产生微调控件。操作步骤:操作步骤:(1)在项目管理器窗口的)在项目管理器窗口的“数据数据”选项卡中选择选项卡中选择XSK表,然后单击右侧的【修改】按钮,打开表,然后单击右侧的【修改】按钮,打开“表表设计器设计器”窗口,如图窗口,如图7.12所示。所示。2022-8-9(2)在字段选项卡中的字段列表框中选择奖学金字段,在下面)在字段选项卡中的字段列表框中选择奖学金字段,在下面的的“匹配字段类型到类匹配字段类型到类”选项组中的选项组中的“显示类显示类”下拉列表框中下拉列表框中选择选择Spinner,然后单击【确定】按钮。,然后单击【确定】按钮。(3)新建一表单,添加)新建一表单,添加XSK表到数据
49、环境,从数据环境中拖表到数据环境,从数据环境中拖动奖学金字段到表单中,即产生一个微调控件。如图动奖学金字段到表单中,即产生一个微调控件。如图7.13所示。所示。2022-8-97.2.3 创建工具栏创建工具栏 工具栏是一组图形方式的小按钮,单击后可以工具栏是一组图形方式的小按钮,单击后可以执行指定的一组命令。执行指定的一组命令。工具栏可以浮动在窗口中,也可以停放在工具栏可以浮动在窗口中,也可以停放在VFP主窗口的上部、下部或两边。你可以定制主窗口的上部、下部或两边。你可以定制VFP提供的工具栏,也可以用提供的工具栏,也可以用VFP提供的工具栏基提供的工具栏基类创建自己的工具栏。类创建自己的工具
50、栏。2022-8-91创建工具栏创建工具栏 要创建自定义工具栏,必须首先为它定义一个类。要创建自定义工具栏,必须首先为它定义一个类。VFP提供提供了一个工具栏基类,在此基础上,你可以创建所需要的类。了一个工具栏基类,在此基础上,你可以创建所需要的类。操作步骤如下:操作步骤如下:(1)在)在“项目管理器项目管理器”中,选定中,选定“类类”选项卡;选项卡;(2)单击【新建】按钮,弹出图)单击【新建】按钮,弹出图7.14所示的对话框;所示的对话框;2022-8-9(3)在)在“类名类名”框中,键入新类的名称,如框中,键入新类的名称,如Mytools;(4)在)在“派生于派生于”框中,选择框中,选择“