670 likes | 863 Views
第九章 表单 ( FORM ) 和面向对象的程序设计. 9.1 表单及表单设计. 9.2 应用程序的组装“模块”: VFP 类与对象. 9.3 表单对象的应用实例. 9.4 设置表单或表单集模板( Template). 第十章 表单( FORM )和面向对象的程序设计 本章将介绍:表单、表单集的设计及应用;面向对象的程序设计; VFP 中的类和对象。. 9.1 表单及表单设计. 表单又叫“窗体”,提供给用户一个对数据查看、输入的屏幕“界面”;提供了一个能适应用户事件和系统事件的强有力的对象集,使用户能方便地完成信息管理任务。.
E N D
第九章 表单(FORM)和面向对象的程序设计 9.1 表单及表单设计 9.2 应用程序的组装“模块”: VFP类与对象 9.3 表单对象的应用实例 9.4 设置表单或表单集模板(Template)
第十章 表单(FORM)和面向对象的程序设计 本章将介绍:表单、表单集的设计及应用;面向对象的程序设计;VFP中的类和对象。 9.1 表单及表单设计 表单又叫“窗体”,提供给用户一个对数据查看、输入的屏幕“界面”;提供了一个能适应用户事件和系统事件的强有力的对象集,使用户能方便地完成信息管理任务。 一、表单的类型 1.从创建单文档和多文档界面来分表单类型 在VFP中有两种应用程序界面: 多文档界面(MDI) 单文档界面(SDI)
多文档界面(MDI):由单一的主窗口组成,其它应用程序窗口在主窗口中或浮动在主窗口之上。VFP本身就是一个MDI的窗口,包含了命令窗口,编辑窗口和设计窗口等。多文档界面(MDI):由单一的主窗口组成,其它应用程序窗口在主窗口中或浮动在主窗口之上。VFP本身就是一个MDI的窗口,包含了命令窗口,编辑窗口和设计窗口等。 单文档界面(SDI):由一个或多个相互独立的窗口组成,这些窗口单独显示。 但也有一些应用程序综合了SDI和MDI的特性,需要将SDI和MDI 混合使用。例如,VFP将调试器显示为一SDI应用程序,而它本身又包含了自己的MDI窗口
为了支持这两种类型的界面,VFP允许创建以下几种类型的表单:为了支持这两种类型的界面,VFP允许创建以下几种类型的表单: 子表单(Child Form):用于创建MDI窗口中一个表单,子表单不可移至父表单(主表单)边界之外,当其最小化时将显示在MDI窗口的底部。如主窗口最小化时,它也一同最小化。 浮动表单(Floating Form):属于一主表单,但并不是包含在主表单中,它可以移至屏幕的任何位置,但不能在主窗口后台移动。最小化时,它将显示在桌面的底部。当MDI最小化,一同最小化。 顶层表单(Top-leve form):没有父表单的独立表单,用于创建一个SDI应用程序,或用作MDI应用程序中其它子表单的父表单。顶层表单与其他Windows应用程序同级,可出现在其前台或后台,并且显示在Windows任务栏中。
表单类型 ShowWindow属性 MDIForm Desktop 主表单 2-作为顶层表单 .F. .F. 子表单 0-在屏幕中 .T.最大化时子表单和父表单相连 .F. 1-在顶层表单中 .F.最大化时子窗口为分开窗口 浮动表单 0-在屏幕中 .F. 2-作为顶层表单 .T. 设置表单的下同类型: 表单在新建立时方法都是一样的,只有通过更改表单的属性可以将表单设置为所需的类型 1、 新建三个表单,其属性设置如下:
表单文件名 caption showwindows name MidForm Desktop 1、MdiForm.scx Mdi表单 2-作为顶层表单 frmMDI .F. .F. 2、ChilsForm.scx 子表单 1-在顶层表单中 frmchlid .T. .F. 3、FloatForm.scx 浮动表单 0-在屏幕中 frmfloat .F. .T. 2、修改表单,在表单文件MdiForm.scx中添加二个命令按钮:其一Caption分别为“显示子菜单”,代码为DO Form ChildForm.scx,另一为“显示浮动菜单”,代码为DO Form FloatForm.scx 让我们进行演示,建立三个表单,分别为:MDIform. scx、Childform . scx 、loatForm . scx 三类表单演示操作
作为数据(库)表数据信息的输入、输出显示屏幕的界面作为数据(库)表数据信息的输入、输出显示屏幕的界面
2、从表单用途分类,主要有以下两类: 作为应用程序主屏幕(主采单)的界面
表单设计主菜单 文档管理信息系统 输入 修改 检索 删除 打印、显示 退出 按分类号 按分类号 按文档名 按任意条件 按分类号 按任意条件 打印全部卡片 打印登记报表 显示全部卡片 表单设计的各种界面
二、创建表单及表单集 常使用表单向导(Form Wizard)或表单设计器(Form Designer)来新建表单。 方法: • 文件菜单笺—新建—表单—新文件(或向导) • 顶目管理器—文档—表单—新建 即可进入表单设计器 1、在表单设计器中用户自已设计表单
2、使用向导建立新表单 在表单向导对话框中,按提示(与使用其它向导一样)一步步选择完成。
3、扩展表单为表单集 表单集是由一个或多个表单组成,可以作为一个整体单元操作,可以同时显示或隐蔽全部表单。建立了一个表单集便可以对它添加多个表单。 (1)建立表单集方法:先建立一个表单,然后在“表单” 菜单中选择“创建表单集”(Create Formset)即建立了一个表单集。 (2)添加和移除表单:可从“表单”(Form)菜单选“添加新表单”(Add New Form)。为从表单集去掉一个表单,可以在表单设计器底部的“表单”(Form)框选择表单,然后从“表单”(Form)菜单选“移除表单”(Remove Form)。 (3)移除一个表单集:可从表单(Form)菜单选“移除表单集”(Remove Formset)。
四、创建表单集 表单集是一个或多个表单的“父亲”容器。可对多个表单进行统一管理和使用。 一、创建表单集 新建或打开一个已存在的表单,在主菜单笺“表单”中选”创建表单集”
二、添加、移除表单 在主菜单笺“表单”中选”添加表单”或“移除表单”
4、设置数据环境 表单和表单集的数据源:表(Tables)和视图(Views),以及表之间的关系,用数据环境设计器来添加。 在属性窗口中一般的数据环境属性设置如下: 属性 描述 缺省设置 AutoCloseTables 当表或表单集释放时,控制是否表和 真(.T.) 视图被关闭 AutoOpenTables 当表单运行时,控制数据环境中的表 真(.T.) 和视图是否打开 InitialSelectedAlias 当表单运行时,所选择的表或视图 在设计时,如果没有指 定,则选定在运行时第 一个加到数据环境的临 时表
三、添加和操作表单对象 步骤 每个表单都有相应的属性、事件、方法。常用表单控制工具栏、调色板工具栏、布局工具栏、属性窗口、数据环境等进行设计。设计一个表单的步骤: (1)创建表单并设置表单的属性 (2)给表单添加适当的容器、控件 (3)设置容器、控件的属性 (4)编写事件代码
通过“表单控制工具栏”添加对象到一个表单,对象可是:通过“表单控制工具栏”添加对象到一个表单,对象可是: (1)容器 (Container) (2) 控件 (Controls) (3)用户自定义类 (4)OLE对象 Active 选定对象 文本框 编辑框 命令按钮 命令按钮组 选项按钮组 复选框 组合框 列表框 微调控件 表格 图象 计时器 页框 查看类 标签 线条 形状 容器 分隔符 超级链接 生成器锁定 按钮锁定 控件 绑定控件 1、添加VFP容器到表单:命令按钮组(Command button group) 表格(Grid) 选项按钮组(Option button group) 页框(Page frame)
2、添加VFP控件到表单: 复选框(Check box)、组合框(Combo box)、命令按钮(Command button)、编辑框(Edit box)、图像(Image)、标签(Label)、线条(Line)、列表框(List box)、OLE绑定型控件(OLE Bound Control)、OLE容器控件(OLE Container Control)、形状(Shape)、微调控件(Spinner)、文本框(Text box)、记时器(Timer)。
功能和所选控件对应关系 功能类型 应该选择的控件 提供给用户预先设定的选择 选择按钮组、列表框和下拉列表框、复选框 接受不能预先设定的用户输入 文本框、编辑框、组合框 接受有一定值范围的输入 微调 执行具有一定时间间隔的特定任务 计时器 显示信息 图像、标签、文本框、编辑框 、形状
操作练习:向表单添加控件 1、图像、标签、文本框、编辑框、形状。 2、用生成器锁定控件、按钮锁定控件给表单添加控件。 3、按钮组、列表框和下拉列表框、复选框 4、微调、计时器
9.2 面向应用程序的组装“模块” :VFP类与对象 在学习表单设计中,通过上机实践对面对象的程序设计已有了一定的认识,下面以表所示来小结:面向对象方法与结构程序设计方法之区别: 设方式方法 计方式 数据显示方式 处理方式 使用方式 处理顺序 结构程序 面向对象程序 过程性(Process) 对向性(Object) 显示型 隐藏型 单一程序编码 对象模块化 一次使用 可以重用 定位方式 非定位方式
设计方式 指对问题处理的程序设计方式。 1、过程性的设计思想中 • 是针对问题采用顺序性的程序处理决问题。 • 采用逻辑概念设计程序文件。 • 在解决问题的过程中,常发生调用子过程程序文件。 2、面向对象程序设计方法,是采用“对象”为设计思想中心。 • 不采用顺序性处理方式,对问题采用了对象本身的属性与方法来解决问题。 • 在处理问题过程中,可以直接在对象中设计事件程序,直接触发问题。
一、Visual FoxPro中的对象 1、 什么是对象? 对象是VFP程序的基本构造块,对象具有属性(Properties)、方法(Mathod)以及键盘、鼠标或程序触发等的事件程序,通过属性、事件和方法等等所组合而成的具体抽象实体,就称为对象。 而通过属性、事件和方法,可以实现一个对象的功能。 2、对象的属性、事件和方法 “属性”(Properties)封装了数据,每个对象都具有“属性”。 “属性”值可以在设计时设置,也可以在运行时更改,但有的“属性”是只读属性,不可改变。 “事件”(Events)是预先定义的动作,由用户或者系统激活。VFP中的事件通常包括了键盘“事件”和鼠标“事件”,如单击或双击鼠标,移动鼠标、按键盘等(见P247)。
“方法”(methods)是指对象为实现一定功能而编写的代码, “方法”和对象相连。事件中的代码可以认为是基于事件的响应方法。但“方法”是可以独立于事件的单独代码,必要时可以由其它方法或程序代码进行显示的调用。 事件通常已经预先由系统定义好了,不能随便的扩充,而方法和属性却可以无限的扩展,事件的发生具有一定的顺序, 如:load和click, load在执行表单时就激活了,而click在执行表单后需单击命令按钮才激活。 如:下例:
FORM(事件): load 代码:thisform.backcolor=rgb(255,0,0) Command(事件):click 代码:thisform.label2.caption="abcdefg"
执行表单文件,立即form的背景为红色。 当单击command1,label1的值才显示出来。
二、 Visual FoxPro中的类 Visual FoxPro中的对象的概念和类的概念是密切相关的,但是有区别的,类作为一个对象的整体定义而存在,它是对象的轮廓和蓝图。 对象和类的关系就如同一台机床和图纸的关系,图纸决定了某一种类型的机床的功能和外观,而一台具体的机床可以看作一个对象而存在。某种类型的,根据机床的初始设计图可以设计出一个系列的机床产品图,这就如同由一个父类派生出若干子类一样,属于某个系列的某一台具体的机床可以看作是一个具体的对象。 所有对象的属性、事件、方法在定义类时都将被指定。 类的三大特性:封装性、继承性、再分类性(子类)。
(1)封装性 如一台电话只需一根电话线连接就可以拨号使用,而不必去了解电话内部的设置。你看到的是电话类的一个对象,其内部的接收、转换、电子信号的处理等复杂性(属性、事件、方法)被隐藏了。 图1电话 通过对事务的抽象,由类定义的对象可以将自己内部的复杂性封装起来。 封装就是指将对象的方法、属性代码包装在一起。
(2)继承性 子类可以继承父类的所有的属性和方法,也可根据需要加入新的属性和方法。 如下图所示,“电话”种类可以有很多种,但都具有基类电话的基本属性。即可从父电话类派生出一系列的子电话类,这些子类的形状虽然有改变或新增加了一些属性(功能),但仍继承了父类的基本属性、事件和方法。 图2
(3)再分类(SubClass) 意义要于类(Class)本身可以不受层次的限制,往下扩展更多的类,让子类继承上一层类的方法,并且有其本身的属性与方法定义。这样使程序编码减至最低。甚至在修改时,只需要修改其中一层的类,其子类(SubClass)均自动调整。增加维护效率。 如: IC产生掌上型扫描仪,又将掌上型扫描仪某一功能板装至桌上型扫描仪,最后又将桌上型扫描仪某一元件装至投影片扫描仪。 Class:掌上型扫描仪 SubClass:桌上型扫描仪、投影片扫描仪 图3
2、类的创建、修改及使用 创建类有二种方法:用类设计器创建、通过写代码创建。 下面用类设计器来创建类(同时对类的三大特性进一步了解) 创建:新建文件 类 新文件 类设计器 保存:文件类型为类 修改:打开 类 类文件名 进入类设计器可修改。 例1: 命令按钮类, 由它创建 子类:代码:thisform.release 存贮该 新建的命令子类,用于表单中实现“退出” 功能。 其代码及caption的属性“退出”都被封装,看不到了。而且继承了 命令按钮类(父类)的原已有的属性等。
例2:创建“电子查看”类 方法:新建表单 文件 另存为类。 if this.parent.label1.left+this.parent.label1.width>0 this.parent.label1.left=this.parent.label1.left-20 else this.parent.label1.left=this.parent.shape1.width endif 自定义类演示
将整个表单另成为 “电子查看”类(自定义类),类文件名为JZ.vcx
操作:1、新建表单集,拖放JZ到表单集(bdj.scx),双击“计时器”,看不到代码,被封装。操作:1、新建表单集,拖放JZ到表单集(bdj.scx),双击“计时器”,看不到代码,被封装。 2、执行结果,文本内容显示。
3、打开JZ类进行修改:删除文本“文档管理信息系统”,再打开表单集(bdj.scx),可见其类(JZ.v cx)自动被修改。 4、以JZ.vcx为父类,创建子类jzz.vcx 。(方法与例1同) (可用例1建的类,代码:thisformset.release)
三、类的层次 如书P248 1、VFP的基类和层次 书P249 2、容器(container)类和控件(Control)类 VFP的类有两种主要类型:容器类和控件类。 (1)容器类 容器类包含其它对象,并且允许访问这些对象。见表9-8 列出了各容器类所能包含的对象。 (2)控件类 控件类的封装比容器类更为严密,但因此损失了一些灵活性。控件类没有“Addobject”方法程序。(”没有增加对象“)