1 / 67

第九章 表单 ( FORM ) 和面向对象的程序设计

第九章 表单 ( FORM ) 和面向对象的程序设计. 9.1 表单及表单设计. 9.2 应用程序的组装“模块”: VFP 类与对象. 9.3 表单对象的应用实例. 9.4 设置表单或表单集模板( Template). 第十章 表单( FORM )和面向对象的程序设计 本章将介绍:表单、表单集的设计及应用;面向对象的程序设计; VFP 中的类和对象。. 9.1 表单及表单设计. 表单又叫“窗体”,提供给用户一个对数据查看、输入的屏幕“界面”;提供了一个能适应用户事件和系统事件的强有力的对象集,使用户能方便地完成信息管理任务。.

isha
Download Presentation

第九章 表单 ( FORM ) 和面向对象的程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第九章 表单(FORM)和面向对象的程序设计 9.1 表单及表单设计 9.2 应用程序的组装“模块”: VFP类与对象 9.3 表单对象的应用实例 9.4 设置表单或表单集模板(Template)

  2. 第十章 表单(FORM)和面向对象的程序设计 本章将介绍:表单、表单集的设计及应用;面向对象的程序设计;VFP中的类和对象。 9.1 表单及表单设计 表单又叫“窗体”,提供给用户一个对数据查看、输入的屏幕“界面”;提供了一个能适应用户事件和系统事件的强有力的对象集,使用户能方便地完成信息管理任务。 一、表单的类型 1.从创建单文档和多文档界面来分表单类型 在VFP中有两种应用程序界面: 多文档界面(MDI) 单文档界面(SDI)

  3. 多文档界面(MDI):由单一的主窗口组成,其它应用程序窗口在主窗口中或浮动在主窗口之上。VFP本身就是一个MDI的窗口,包含了命令窗口,编辑窗口和设计窗口等。多文档界面(MDI):由单一的主窗口组成,其它应用程序窗口在主窗口中或浮动在主窗口之上。VFP本身就是一个MDI的窗口,包含了命令窗口,编辑窗口和设计窗口等。 单文档界面(SDI):由一个或多个相互独立的窗口组成,这些窗口单独显示。 但也有一些应用程序综合了SDI和MDI的特性,需要将SDI和MDI 混合使用。例如,VFP将调试器显示为一SDI应用程序,而它本身又包含了自己的MDI窗口

  4. 为了支持这两种类型的界面,VFP允许创建以下几种类型的表单:为了支持这两种类型的界面,VFP允许创建以下几种类型的表单: 子表单(Child Form):用于创建MDI窗口中一个表单,子表单不可移至父表单(主表单)边界之外,当其最小化时将显示在MDI窗口的底部。如主窗口最小化时,它也一同最小化。 浮动表单(Floating Form):属于一主表单,但并不是包含在主表单中,它可以移至屏幕的任何位置,但不能在主窗口后台移动。最小化时,它将显示在桌面的底部。当MDI最小化,一同最小化。 顶层表单(Top-leve form):没有父表单的独立表单,用于创建一个SDI应用程序,或用作MDI应用程序中其它子表单的父表单。顶层表单与其他Windows应用程序同级,可出现在其前台或后台,并且显示在Windows任务栏中。

  5. 表单类型 ShowWindow属性 MDIForm Desktop 主表单 2-作为顶层表单 .F. .F. 子表单 0-在屏幕中 .T.最大化时子表单和父表单相连 .F. 1-在顶层表单中 .F.最大化时子窗口为分开窗口 浮动表单 0-在屏幕中 .F. 2-作为顶层表单 .T. 设置表单的下同类型: 表单在新建立时方法都是一样的,只有通过更改表单的属性可以将表单设置为所需的类型 1、 新建三个表单,其属性设置如下:

  6. 表单文件名 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 三类表单演示操作

  7. 作为数据(库)表数据信息的输入、输出显示屏幕的界面作为数据(库)表数据信息的输入、输出显示屏幕的界面

  8. 2、从表单用途分类,主要有以下两类: 作为应用程序主屏幕(主采单)的界面

  9. 表单设计主菜单 文档管理信息系统 输入 修改 检索 删除 打印、显示 退出 按分类号 按分类号 按文档名 按任意条件 按分类号 按任意条件 打印全部卡片 打印登记报表 显示全部卡片 表单设计的各种界面

  10. 三个表单

  11. 二、创建表单及表单集 常使用表单向导(Form Wizard)或表单设计器(Form Designer)来新建表单。 方法: • 文件菜单笺—新建—表单—新文件(或向导) • 顶目管理器—文档—表单—新建 即可进入表单设计器 1、在表单设计器中用户自已设计表单

  12. 2、使用向导建立新表单 在表单向导对话框中,按提示(与使用其它向导一样)一步步选择完成。

  13. 3、扩展表单为表单集 表单集是由一个或多个表单组成,可以作为一个整体单元操作,可以同时显示或隐蔽全部表单。建立了一个表单集便可以对它添加多个表单。 (1)建立表单集方法:先建立一个表单,然后在“表单” 菜单中选择“创建表单集”(Create Formset)即建立了一个表单集。 (2)添加和移除表单:可从“表单”(Form)菜单选“添加新表单”(Add New Form)。为从表单集去掉一个表单,可以在表单设计器底部的“表单”(Form)框选择表单,然后从“表单”(Form)菜单选“移除表单”(Remove Form)。 (3)移除一个表单集:可从表单(Form)菜单选“移除表单集”(Remove Formset)。

  14. 四、创建表单集 表单集是一个或多个表单的“父亲”容器。可对多个表单进行统一管理和使用。 一、创建表单集 新建或打开一个已存在的表单,在主菜单笺“表单”中选”创建表单集”

  15. 二、添加、移除表单 在主菜单笺“表单”中选”添加表单”或“移除表单”

  16. 4、设置数据环境 表单和表单集的数据源:表(Tables)和视图(Views),以及表之间的关系,用数据环境设计器来添加。 在属性窗口中一般的数据环境属性设置如下: 属性 描述 缺省设置 AutoCloseTables 当表或表单集释放时,控制是否表和 真(.T.) 视图被关闭 AutoOpenTables 当表单运行时,控制数据环境中的表 真(.T.) 和视图是否打开 InitialSelectedAlias 当表单运行时,所选择的表或视图 在设计时,如果没有指 定,则选定在运行时第 一个加到数据环境的临 时表

  17. 三、添加和操作表单对象 步骤 每个表单都有相应的属性、事件、方法。常用表单控制工具栏、调色板工具栏、布局工具栏、属性窗口、数据环境等进行设计。设计一个表单的步骤: (1)创建表单并设置表单的属性 (2)给表单添加适当的容器、控件 (3)设置容器、控件的属性 (4)编写事件代码

  18. 通过“表单控制工具栏”添加对象到一个表单,对象可是:通过“表单控制工具栏”添加对象到一个表单,对象可是: (1)容器 (Container) (2) 控件 (Controls) (3)用户自定义类 (4)OLE对象 Active 选定对象 文本框 编辑框 命令按钮 命令按钮组 选项按钮组 复选框 组合框 列表框 微调控件 表格 图象 计时器 页框 查看类 标签 线条 形状 容器 分隔符 超级链接 生成器锁定 按钮锁定 控件 绑定控件 1、添加VFP容器到表单:命令按钮组(Command button group) 表格(Grid) 选项按钮组(Option button group) 页框(Page frame)

  19. 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)。

  20. 功能和所选控件对应关系 功能类型 应该选择的控件 提供给用户预先设定的选择 选择按钮组、列表框和下拉列表框、复选框 接受不能预先设定的用户输入 文本框、编辑框、组合框 接受有一定值范围的输入 微调 执行具有一定时间间隔的特定任务 计时器 显示信息 图像、标签、文本框、编辑框 、形状

  21. 操作练习:向表单添加控件 1、图像、标签、文本框、编辑框、形状。 2、用生成器锁定控件、按钮锁定控件给表单添加控件。 3、按钮组、列表框和下拉列表框、复选框 4、微调、计时器

  22. 9.2 面向应用程序的组装“模块” :VFP类与对象 在学习表单设计中,通过上机实践对面对象的程序设计已有了一定的认识,下面以表所示来小结:面向对象方法与结构程序设计方法之区别: 设方式方法 计方式 数据显示方式 处理方式 使用方式 处理顺序 结构程序 面向对象程序 过程性(Process) 对向性(Object) 显示型 隐藏型 单一程序编码 对象模块化 一次使用 可以重用 定位方式 非定位方式

  23. 设计方式 指对问题处理的程序设计方式。 1、过程性的设计思想中 • 是针对问题采用顺序性的程序处理决问题。 • 采用逻辑概念设计程序文件。 • 在解决问题的过程中,常发生调用子过程程序文件。 2、面向对象程序设计方法,是采用“对象”为设计思想中心。 • 不采用顺序性处理方式,对问题采用了对象本身的属性与方法来解决问题。 • 在处理问题过程中,可以直接在对象中设计事件程序,直接触发问题。

  24. 一、Visual FoxPro中的对象 1、 什么是对象? 对象是VFP程序的基本构造块,对象具有属性(Properties)、方法(Mathod)以及键盘、鼠标或程序触发等的事件程序,通过属性、事件和方法等等所组合而成的具体抽象实体,就称为对象。 而通过属性、事件和方法,可以实现一个对象的功能。 2、对象的属性、事件和方法 “属性”(Properties)封装了数据,每个对象都具有“属性”。 “属性”值可以在设计时设置,也可以在运行时更改,但有的“属性”是只读属性,不可改变。 “事件”(Events)是预先定义的动作,由用户或者系统激活。VFP中的事件通常包括了键盘“事件”和鼠标“事件”,如单击或双击鼠标,移动鼠标、按键盘等(见P247)。

  25. “方法”(methods)是指对象为实现一定功能而编写的代码, “方法”和对象相连。事件中的代码可以认为是基于事件的响应方法。但“方法”是可以独立于事件的单独代码,必要时可以由其它方法或程序代码进行显示的调用。 事件通常已经预先由系统定义好了,不能随便的扩充,而方法和属性却可以无限的扩展,事件的发生具有一定的顺序, 如:load和click, load在执行表单时就激活了,而click在执行表单后需单击命令按钮才激活。 如:下例:

  26. FORM(事件): load 代码:thisform.backcolor=rgb(255,0,0) Command(事件):click 代码:thisform.label2.caption="abcdefg"

  27. 执行表单文件,立即form的背景为红色。 当单击command1,label1的值才显示出来。

  28. 二、 Visual FoxPro中的类 Visual FoxPro中的对象的概念和类的概念是密切相关的,但是有区别的,类作为一个对象的整体定义而存在,它是对象的轮廓和蓝图。 对象和类的关系就如同一台机床和图纸的关系,图纸决定了某一种类型的机床的功能和外观,而一台具体的机床可以看作一个对象而存在。某种类型的,根据机床的初始设计图可以设计出一个系列的机床产品图,这就如同由一个父类派生出若干子类一样,属于某个系列的某一台具体的机床可以看作是一个具体的对象。 所有对象的属性、事件、方法在定义类时都将被指定。 类的三大特性:封装性、继承性、再分类性(子类)。

  29. (1)封装性 如一台电话只需一根电话线连接就可以拨号使用,而不必去了解电话内部的设置。你看到的是电话类的一个对象,其内部的接收、转换、电子信号的处理等复杂性(属性、事件、方法)被隐藏了。 图1电话 通过对事务的抽象,由类定义的对象可以将自己内部的复杂性封装起来。 封装就是指将对象的方法、属性代码包装在一起。

  30. (2)继承性 子类可以继承父类的所有的属性和方法,也可根据需要加入新的属性和方法。 如下图所示,“电话”种类可以有很多种,但都具有基类电话的基本属性。即可从父电话类派生出一系列的子电话类,这些子类的形状虽然有改变或新增加了一些属性(功能),但仍继承了父类的基本属性、事件和方法。 图2

  31. (3)再分类(SubClass) 意义要于类(Class)本身可以不受层次的限制,往下扩展更多的类,让子类继承上一层类的方法,并且有其本身的属性与方法定义。这样使程序编码减至最低。甚至在修改时,只需要修改其中一层的类,其子类(SubClass)均自动调整。增加维护效率。 如: IC产生掌上型扫描仪,又将掌上型扫描仪某一功能板装至桌上型扫描仪,最后又将桌上型扫描仪某一元件装至投影片扫描仪。 Class:掌上型扫描仪 SubClass:桌上型扫描仪、投影片扫描仪 图3

  32. 2、类的创建、修改及使用 创建类有二种方法:用类设计器创建、通过写代码创建。 下面用类设计器来创建类(同时对类的三大特性进一步了解) 创建:新建文件 类 新文件 类设计器 保存:文件类型为类 修改:打开 类 类文件名 进入类设计器可修改。 例1: 命令按钮类, 由它创建 子类:代码:thisform.release 存贮该 新建的命令子类,用于表单中实现“退出” 功能。 其代码及caption的属性“退出”都被封装,看不到了。而且继承了 命令按钮类(父类)的原已有的属性等。

  33. 例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 自定义类演示

  34. 将整个表单另成为 “电子查看”类(自定义类),类文件名为JZ.vcx

  35. 将生成的自定义类添加到类库

  36. 操作:1、新建表单集,拖放JZ到表单集(bdj.scx),双击“计时器”,看不到代码,被封装。操作:1、新建表单集,拖放JZ到表单集(bdj.scx),双击“计时器”,看不到代码,被封装。 2、执行结果,文本内容显示。

  37. 3、打开JZ类进行修改:删除文本“文档管理信息系统”,再打开表单集(bdj.scx),可见其类(JZ.v cx)自动被修改。 4、以JZ.vcx为父类,创建子类jzz.vcx 。(方法与例1同) (可用例1建的类,代码:thisformset.release)

  38. 5、拖放到表单集(BDJ.SCX)form2中,增加文本 执行

  39. 三、类的层次 如书P248 1、VFP的基类和层次 书P249 2、容器(container)类和控件(Control)类 VFP的类有两种主要类型:容器类和控件类。 (1)容器类 容器类包含其它对象,并且允许访问这些对象。见表9-8 列出了各容器类所能包含的对象。 (2)控件类 控件类的封装比容器类更为严密,但因此损失了一些灵活性。控件类没有“Addobject”方法程序。(”没有增加对象“)

More Related