第九章表单(FORM)和面向对象的程序设计_第1页
第九章表单(FORM)和面向对象的程序设计_第2页
第九章表单(FORM)和面向对象的程序设计_第3页
第九章表单(FORM)和面向对象的程序设计_第4页
第九章表单(FORM)和面向对象的程序设计_第5页
已阅读5页,还剩62页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

应用程序的组装“模块”:VFP类与对象9.1 表单及表单设计9.3表单对象的应用实例9.4设置表单或表单集模板(Template)9.1表单及表单设计

表单又叫“窗体”,提供给用户一个对数据查看、输入的屏幕“界面”;提供了一个能适应用户事件和系统事件的强有力的对象集,使用户能方便地完成信息管理任务。

一、表单的类型1.从创建单文档和多文档界面来分表单类型在VFP中有两种应用程序界面:多文档界面(MDI)单文档界面(SDI)第十章表单(FORM)和面向对象的程序设计本章将介绍:表单、表单集的设计及应用;面向对象的程序设计;VFP中的类和对象。多文档界面(MDI):由单一的主窗口组成,其它应用程序窗口在主窗口中或浮动在主窗口之上。VFP本身就是一个MDI的窗口,包含了命令窗口,编辑窗口和设计窗口等。单文档界面(SDI):由一个或多个相互独立的窗口组成,这些窗口单独显示。但也有一些应用程序综合了SDI和MDI的特性,需要将SDI和MDI混合使用。例如,VFP将调试器显示为一SDI应用程序,而它本身又包含了自己的MDI窗口 为了支持这两种类型的界面,VFP允许创建以下几种类型的表单:子表单(ChildForm):用于创建MDI窗口中一个表单,子表单不可移至父表单(主表单)边界之外,当其最小化时将显示在MDI窗口的底部。如主窗口最小化时,它也一同最小化。浮动表单(FloatingForm):属于一主表单,但并不是包含在主表单中,它可以移至屏幕的任何位置,但不能在主窗口后台移动。最小化时,它将显示在桌面的底部。当MDI最小化,一同最小化。顶层表单(Top-leveform):没有父表单的独立表单,用于创建一个SDI应用程序,或用作MDI应用程序中其它子表单的父表单。顶层表单与其他Windows应用程序同级,可出现在其前台或后台,并且显示在Windows任务栏中。表单类型ShowWindow属性MDIForm Desktop主表单2-作为顶层表单 .F. .F.子表单0-在屏幕中 .T.最大化时子表单和父表单相连.F. 1-在顶层表单中.F.最大化时子窗口为分开窗口浮动表单0-在屏幕中.F. 2-作为顶层表单 .T.

设置表单的下同类型:表单在新建立时方法都是一样的,只有通过更改表单的属性可以将表单设置为所需的类型1、新建三个表单,其属性设置如下:表单文件名 captionshowwindowsnameMidFormDesktop1、MdiForm.scxMdi表单2-作为顶层表单frmMDI.F. .F.2、ChilsForm.scx子表单1-在顶层表单中frmchlid.T..F.3、FloatForm.scx浮动表单0-在屏幕中frmfloat.F..T.2、修改表单,在表单文件MdiForm.scx中添加二个命令按钮:其一Caption分别为“显示子菜单”,代码为DOFormChildForm.scx,另一为“显示浮动菜单”,代码为DOFormFloatForm.scx三类表单演示操作让我们进行演示,建立三个表单,分别为:MDIform.scx、Childform.scx、loatForm.scx作为数据(库)表数据信息的输入、输出显示屏幕的界面2、从表单用途分类,主要有以下两类:作为应用程序主屏幕(主采单)的界面文档管理信息系统输入修改检索删除打印、显示退出按分类号按分类号按文档名按任意条件按分类号按任意条件打印全部卡片打印登记报表显示全部卡片表单设计主菜单表单设计的各种界面三个表单

二、创建表单及表单集方法:

•文件菜单笺—新建—表单—新文件(或向导)

•顶目管理器—文档—表单—新建即可进入表单设计器常使用表单向导(FormWizard)或表单设计器(FormDesigner)来新建表单。1、在表单设计器中用户自已设计表单2、使用向导建立新表单在表单向导对话框中,按提示(与使用其它向导一样)一步步选择完成。3、扩展表单为表单集 表单集是由一个或多个表单组成,可以作为一个整体单元操作,可以同时显示或隐蔽全部表单。建立了一个表单集便可以对它添加多个表单。(1)建立表单集方法:先建立一个表单,然后在“表单”菜单中选择“创建表单集”(CreateFormset)即建立了一个表单集。(2)添加和移除表单:可从“表单”(Form)菜单选“添加新表单”(AddNewForm)。为从表单集去掉一个表单,可以在表单设计器底部的“表单”(Form)框选择表单,然后从“表单”(Form)菜单选“移除表单”(RemoveForm)。(3)移除一个表单集:可从表单(Form)菜单选“移除表单集”(RemoveFormset)。四、创建表单集 表单集是一个或多个表单的“父亲”容器。可对多个表单进行统一管理和使用。一、创建表单集 新建或打开一个已存在的表单,在主菜单笺“表单”中选”创建表单集”二、添加、移除表单 在主菜单笺“表单”中选”添加表单”或“移除表单”4、设置数据环境 表单和表单集的数据源:表(Tables)和视图(Views),以及表之间的关系,用数据环境设计器来添加。

在属性窗口中一般的数据环境属性设置如下:属性 描述 缺省设置AutoCloseTables 当表或表单集释放时,控制是否表和 真(.T.)

视图被关闭AutoOpenTables 当表单运行时,控制数据环境中的表 真(.T.)

和视图是否打开

InitialSelectedAlias当表单运行时,所选择的表或视图 在设计时,如果没有指 定,则选定在运行时第 一个加到数据环境的临 时表三、添加和操作表单对象

步骤 每个表单都有相应的属性、事件、方法。常用表单控制工具栏、调色板工具栏、布局工具栏、属性窗口、数据环境等进行设计。设计一个表单的步骤:

(1)创建表单并设置表单的属性(2)给表单添加适当的容器、控件(3)设置容器、控件的属性(4)编写事件代码选定对象查看类标签文本框编辑框命令按钮命令按钮组选项按钮组复选框组合框列表框微调控件表格图象计时器页框Active控件绑定控件线条形状容器分隔符超级链接生成器锁定按钮锁定通过“表单控制工具栏”添加对象到一个表单,对象可是:(1)容器(Container)(2)控件(Controls)(3)用户自定义类(4)OLE对象1、添加VFP容器到表单:命令按钮组(Commandbuttongroup)

表格(Grid)

选项按钮组(Optionbuttongroup)

页框(Pageframe)2、添加VFP控件到表单:复选框(Checkbox)、组合框(Combobox)、命令按钮(Commandbutton)、编辑框(Editbox)、图像(Image)、标签(Label)、线条(Line)、列表框(Listbox)、OLE绑定型控件(OLEBoundControl)、OLE容器控件(OLEContainerControl)、形状(Shape)、微调控件(Spinner)、文本框(Textbox)、记时器(Timer)。功能和所选控件对应关系功能类型 应该选择的控件提供给用户预先设定的选择选择按钮组、列表框和下拉列表框、复选框接受不能预先设定的用户输入文本框、编辑框、组合框接受有一定值范围的输入 微调执行具有一定时间间隔的特定任务计时器显示信息 图像、标签、文本框、编辑框 、形状操作练习:向表单添加控件1、图像、标签、文本框、编辑框、形状。2、用生成器锁定控件、按钮锁定控件给表单添加控件。3、按钮组、列表框和下拉列表框、复选框4、微调、计时器

9.2

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

指对问题处理的程序设计方式。1、过程性的设计思想中

•是针对问题采用顺序性的程序处理决问题。

•采用逻辑概念设计程序文件。

•在解决问题的过程中,常发生调用子过程程序文件。2、面向对象程序设计方法,是采用“对象”为设计思想中心。

•不采用顺序性处理方式,对问题采用了对象本身的属性与方法来解决问题。

•在处理问题过程中,可以直接在对象中设计事件程序,直接触发问题。一、VisualFoxPro中的对象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的值才显示出来。二、VisualFoxPro中的类

VisualFoxPro中的对象的概念和类的概念是密切相关的,但是有区别的,类作为一个对象的整体定义而存在,它是对象的轮廓和蓝图。 对象和类的关系就如同一台机床和图纸的关系,图纸决定了某一种类型的机床的功能和外观,而一台具体的机床可以看作一个对象而存在。某种类型的,根据机床的初始设计图可以设计出一个系列的机床产品图,这就如同由一个父类派生出若干子类一样,属于某个系列的某一台具体的机床可以看作是一个具体的对象。 所有对象的属性、事件、方法在定义类时都将被指定。类的三大特性:封装性、继承性、再分类性(子类)。(1)封装性 如一台电话只需一根电话线连接就可以拨号使用,而不必去了解电话内部的设置。你看到的是电话类的一个对象,其内部的接收、转换、电子信号的处理等复杂性(属性、事件、方法)被隐藏了。 通过对事务的抽象,由类定义的对象可以将自己内部的复杂性封装起来。 封装就是指将对象的方法、属性代码包装在一起。图1电话如下图所示,“电话”种类可以有很多种,但都具有基类电话的基本属性。即可从父电话类派生出一系列的子电话类,这些子类的形状虽然有改变或新增加了一些属性(功能),但仍继承了父类的基本属性、事件和方法。图2(2)继承性子类可以继承父类的所有的属性和方法,也可根据需要加入新的属性和方法。(3)再分类(SubClass)

意义要于类(Class)本身可以不受层次的限制,往下扩展更多的类,让子类继承上一层类的方法,并且有其本身的属性与方法定义。这样使程序编码减至最低。甚至在修改时,只需要修改其中一层的类,其子类(SubClass)均自动调整。增加维护效率。如:

IC产生掌上型扫描仪,又将掌上型扫描仪某一功能板装至桌上型扫描仪,最后又将桌上型扫描仪某一元件装至投影片扫描仪。Class:掌上型扫描仪SubClass:桌上型扫描仪、投影片扫描仪图3 存贮该新建的命令子类,用于表单中实现“退出”功能。其代码及caption的属性“退出”都被封装,看不到了。而且继承了命令按钮类(父类)的原已有的属性等。2、类的创建、修改及使用创建类有二种方法:用类设计器创建、通过写代码创建。下面用类设计器来创建类(同时对类的三大特性进一步了解)命令按钮类,子类:代码:thisform.release由它创建创建:新建文件类新文件类设计器保存:文件类型为类修改:打开类类文件名进入类设计器可修改。例1:例2:创建“电子查看”类方法:新建表单文件另存为类。ifthis.parent.label1.left+this.parent.label1.width>0 this.parent.label1.left=this.parent.label1.left-20elsethis.parent.label1.left=this.parent.shape1.widthendif自定义类演示将整个表单另成为“电子查看”类(自定义类),类文件名为JZ.vcx将生成的自定义类添加到类库操作:1、新建表单集,拖放JZ到表单集(bdj.scx),双击“计时器”,看不到代码,被封装。

2、执行结果,文本内容显示。3、打开JZ类进行修改:删除文本“文档管理信息系统”,再打开表单集(bdj.scx),可见其类(JZ.vcx)自动被修改。4、以JZ.vcx为父类,创建子类jzz.vcx。(方法与例1同)(可用例1建的类,代码:thisformset.release)5、拖放到表单集(BDJ.SCX)form2中,增加文本执行三、类的层次如书P2481、VFP的基类和层次书P2492、容器(container)类和控件(Control)类VFP的类有两种主要类型:容器类和控件类。(1)容器类 容器类包含其它对象,并且允许访问这些对象。见表9-8列出了各容器类所能包含的对象。(2)控件类 控件类的封装比容器类更为严密,但因此损失了一些灵活性。控件类没有“Addobject”方法程序。(”没有增加对象“)四、对象的处理1、在容器层次中引用对象为处理一个对象,需要知道它相对于容器层次的关系。例如,如果要在表单集中处理一个表单的控件,则需要引用表单集、表单和控件。在其容器层次中引用对象好比给VFP提供这个对象的地址。(1)绝对引用通过提供对象的完整容器层次来引用它:命令:

frsFormSet.frmForm1.cmdButton1例:为了让表格列(gridcolumn)中的控件不起作用,需要提供下面的地址:Formset.Form.PageFrame.Page.Grid.column.Control.Enabled=.F.对象的完整容器层次(2)相对引用在容器层次中引用对象时,例如在表单集合中表单命令按钮的Click(单击)事件,可以通过快捷键方式指明所要处理的对象。下表列出了一些属性和关键字,这些属性和关键字允许更方便地从对象层次中引用对象。

属性或关键字 引用

Parent 该对象的直接容器。

THIS 该对象。

THISFORM 包含该对象的表单。

THISFORMSET 包含该对象的表单集。应用: 命令 何处包含此命令THISFORMSET.frm1.cmd1.Caption=ˊABCˊ 在此表单集合的任何表单上任 何控件的事件或 方法码中。THISFORM.cmd1.Caption=ˊABCˊ 在cmd1所在同样的表单上任何 控件的事件或方 法代码中。THIS.Caption=ˊABCˊ 在需要改变标题(caption)的控件 的事件或方法代码中。THIS.Parent.BackColor=RGB(192,0,0) 在表单上一个控件的事件或方 法代码中,此命 令改变表单的 背景颜色为暗红色。2、设置属性语法:Parent.Object.Property=Value(即:父.对象.属性=值)设置多个属性语法:WITH…ENDWITH例如,在表单集的一个表单中,要设置表格列的多个属性,可以使用如下语法结构:WITHfrsFormSet1.frmForm1.grdGrid1.grcColumn1.width=5.Resizable=.F..ForeColor=RGB(0,0,0).BackColor=RGB(255,255,255,).SelectOnEntry=.T.ENDWITH3、调用方法一旦对象被建立,就可以在应用程序的任何一个地方调用此对象的方法。调用方法的语法如下:Parent.Object.Method(即:父.对象.方法)例:调用显示一个表单的方法:frsFormset.frmForm1.Show4、响应事件当事件发生时,该事件的过程代码将被执行。系统响应用户动作时,事件将被自动触发。例如,当用户单击一个控件时,系统自动执行为Click事件编写的代码。事件代码也能由系统事件触发,例如在计时器控件中的Timer事件。1.核心事件下表列举了VFP的核心事件集,并适用于多数控件:事件 激发后动作Load 表单或表单集被加载进内存。Unload 表单或表单集从内存中释放。Init 对象被创建。Destroy 对象从内存中释放。Click 用户用主鼠标按钮单击对象。DblClick

用户用主鼠标按钮双击对象。RightClick

用户用辅(右)鼠标按钮单击对象。GotFocus

对象接收焦点,由用户动作(如按Tab键和单击),或者在代 码中使用SetFocus方法引起。

LostFocus

对象失去焦点,由用户动作(如按Tab键和单击),或者在代 码中使用SetFocus方法引起。KeyPress

用户按下或释放一个键。MouseDown

当鼠标指针停在一个对象上时用户按下鼠标按钮。MouseMove

用户在对象上移动鼠标。MouseUp

当鼠标指针停在一个对象上时用户释放鼠标按钮。InteractiveChange

交互式改变对象值。ProgrammaticChange

可编程地改变对象值。2.VFP事件顺序见P2543、编写事件代码

每个对象(控件)都可进行属性、事件、方法的设置,现在学习如何定义事件、如何给控件写入方法代码。例题1:设置表单1(背景练习):其中有三个命令按钮控件,作用分别为单击COMMAND1时,表单1的背景图改变,单击COMMAND2时,表单1的背景图又被改变,单击COMMAND3时,释放表单(关闭表单)。方法代码

thisform.picture="c:\programfiles\microsoftvisualstudio\vfp98\fox.bmp"thisform.picture="c:\programfiles\microsoftvisualstudio\vfp98\wizards\wizstone.bmp"thisform.release事件:click背景练习例题2:登录表单Ifthisform.text1.value="12345".and.thisform.text2.value="abc" do文档管理信息系统.scxelse

messagebox("口令或用户名有错,请重输入!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论