1第6章表单设计与应用江苏大学杨永梅26.1面向对象面向对象程序设计(OOP)–基于问题对象的自底向上的功能综合。–面向对象的方法将过程和信息组合成单元(类和对象)。这些单元中的信息通常是隐藏的,需要通过界面或一系列的数据才能显现出来。–面向对象的程序设计是通过对类、子类和对象等的设计来实现的。具体见教材P.1723对象(Object)对象是类的一个实例,包括了数据和过程(操作),是动态概念。VFP中应用程序对象主要指表单、表单集及各种控件。对象根据所基于的类的性质,也可以分为容器对象和控件对象。程序由一个或多个类组成,在程序运行时需要创建该类的各个对象。每个对象都有属性以及与之相关的事件和方法。具体见教材P.1724类(Class)类定义了对象特征以及对象外观和行为的模板。类刻划了一组具有共同特性的对象。四大特征:–继承性:在类、子类和对象之间自动共享函数和数据的一种机制。–多态性:允许相关的对象对同一消息做出不同反应。–封装性:在对象内部,数据和函数是不可分割的,只有通过对象自身的函数才能访问数据。–抽象性:允许用户忽略实施细节,而从更高的等级上考虑一个实体。具体见教材P.1725属性(Property)属性(Property):定义了对象的特征或某一方面的行为。例如,表单的MaxButton属性决定了表单是否具有“最大化”按钮。每个对象都有属性。对象的某些属性可以在设计阶段,也可以在运行阶段设置,某些属性则是不能被设置的,是只读的。属性由对象所基于的类决定。6例:下面往表单中加入三个命令按钮(CommandBuotton),其中两个开始时是隐藏的,通过单击第一个命令按钮显示它们,再利用它们来移动表单和退出表单7例:下面往表单中加入三个命令按钮(CommandBuotton),其中两个开始时是隐藏的,通过单击第一个命令按钮显示它们,再利用它们来移动表单和退出表单。按下工具栏中“CommandBuotton”钮,逐个加入三个命令按钮。选择“from1”,事件form1.Init(表单初始化)的代码:thisform.caption=命令按钮设计实例thisform.command1.caption=单击此按钮显示其它按钮thisform.command2.caption=移动本表单thisform.command3.caption=退出thisform.command2.visible=.F.&&设置command2按钮运行时不可见thisform.command3.visible=.F.&&设置command3按钮运行时不可见选择“command1”,事件command1.click(单击)的代码:thisform.command2.visible=.T.&&显示command2按钮thisform.command3.visible=.T.&&显示command3按钮this.enabled=.F.&&设置自身command1按钮不能用选择“command2”,事件command2.click(单击)的代码:thisform.left=thisform.left+10&&点击鼠标使表单向右移动选择“command3”,事件command3.click(单击)的代码:thisform.release&&关闭此表单8VFP中类的层次基类:系统本身所提供的类。子类:引用VFP基类或其他子类建立的新类。类库:用于存放子类的库文件。(.VCX/.VCT)类库VFP基类派生子类子类子类96.2.1基类(BASSCLASS)表8-1VFP6.0的基类(29个)具体见教材P.17410VFP基类的最小属性集Class:类名,该类属于何种类型。BaseClass:基类名,该类由何种基类派生而来ClassLibray:类库名,该类属于哪种类库文件ParentClass:父类名,对象所基于的类(该类的父类),若该直接由VFP基类派生而来,则ParentClass属性值与BaseClass属性值相同。具体见教材P.174116.2.2VFP的容器与控件控件类Controls容器类ContainersVFP基类具体见教材P.174126.2.2容器与控件VFP的基类有两种:容器类和控件类。–容器类:包容其他类的基类。将容器类的对象加入表单后,无论在设计时还是在运行时,均可以将该容器类的对象作为一个整体进行操作,也可以分别对其包容的对象处理。(表6.3)–控件类:可以包容在容器类中的基类。具体见教材P.17613容器对象和控件对象控件对象是一个可以以图形化的方式显示并能与用户进行交互的对象。控件通常被放置在一个容器内。容器对象是它能包容其他的控件或容器。不同的容器所能包容的对象类型是不同的。对象的嵌套层次关系是包容与被包容的关系。类层次指的是继承与被继承的关系14引用对象必须清楚对象的容器层次关系和对象的名(name属性)。各个对象之间、对象与属性之间用“·”进行分隔。绝对引用:从容器的最高层次引用对象,给出对象的绝对地址。如:Formset1.Form1.Command1相对引用:在容器层次中相对于某个容器的引用。通常运用于某个对象的事件处理代码或方法程序代码中。如:This.Parent.Command215VFP中“相对引用”对象时所用的关键字关键字:只能在方法程序或事件处理代码中使用。Parent:当前对象的直接容器。THIS:当前对象。THISFORM:当前对象所在的表单。THISFORMSET:当前对象所在的表单集。系统变量_SCREEN表示屏幕对象。具体见教材P.17616事件(Event)事件(Event)是由对象可识别的一个动作。用户不能自定义事件,事件集合是固定的,不能进行扩充。一般由用户或系统激活(计时器),可编写代码来响应事件。(VFP系统提供的类叫基类)基类的最小事件集:–Init:当对象创建的时候激活。–Destroy:当对象从内存中释放时激活。–Error:当事件或方法程序中出现错误时激活。具体见教材P.17717186.4表单设计器表单文件:.SCX/.SCT表单向导(FromWizard)–表单向导:为单个表创建操作数据的表单。–一对多表单向导:为两个相关表创建操作数据的表单。两个表之间一定要存在关系,生成的表单中的记录定位按钮只作用于父表,子表记录可通过窗口操作控制。表单设计器快速表单编程方法具体见教材P.18119表单设计器使用“表单设计器”能够可视化地创建、修改表单和表单集。CREATE/MODIFYFORM命令或界面方式打开。CREATEFORMxs_form.scxMODIFYFORMxs_form.scx表单设计器窗口具体见教材181206.4.1表单设计器环境--“属性”窗口在“属性”窗口中设置属性,属性值更改后以粗体显示。一般步骤:–选定对象在“属性”窗口中选择属性在“属性”设置框中设置属性值或利用函数按钮设置。注意点:–部分属性值是只读的。(斜体显示)–字符型属性值不必用引号括起来。–若用表达式赋值,则要在表达式前加上“=”。技巧:可以为一组对象设置同一属性值。216.4.2控件的操作与布局修改表单布局–选择、移动、复制、删除容器对象的选择–表格、命令按钮组、选项按钮组、页框等容器类控件中的子控件226.4.3数据环境表单(集)的数据环境包括了与表单交互作用的表和视图,以及表单要求的表之间的关系。数据环境是表单的一部分,并没有自己独立的存储空间。引入数据环境的目的:–打开或运行表单时它自动地打开表单所基于的表或视图;–将表单属性窗口中的ControlSource属性与数据环境中的所有字段相连;–关闭或释放表单时自动地关闭表和视图。在创建表单时,首先要设置表单的数据环境,以确定表单所用到的表和视图。具体见教材P.185236.4.3数据环境数据环境设计器向数据环境中添加表或视图从数据环境中移去表或视图在数据环境中设置关系–如果添加进数据环境设计器的表有永久关系,这些关系将自动地加到数据环境中;如果没有关系,可以在数据环境中设置这些关系。(拖动字段即可)24256.5表单属性和方法Name:指定对象的名字Caption:标题,指定对象的标题的文本,最多256个字符。BackStyle:设置对象背景是否透明。AutoSize:设置是否可以自动地调整对象大小。ForeColor:设置对象的前景色BackColor:设置对象的背景色对象的name属性,只有它才能代表对象,它与用户在表单设计器中对象显示的内容(caption属性)是不同的。在引用对象时,用户用到的是对象的名字,即Name属性具体见教材P.18726常用属性Height:设置对象的高度Left:设置对象的左边缘位置Top:设置对象的上边缘位置Width:设置对象的宽度FontName:设置对象的字体Visuble:设置对象是否可见Enable:设置对象是否可用补充27表单的常用属性AlwaysOnTop:表单是否总处在其他打开窗口之上。AutoCenter:初始化时自动居中。BackColor:表单窗口的颜色。BorderStyle:表单的边框类型。Caption:标题。Closable:能否通过关闭按钮或控制菜单关闭。ControlBox:是否显示控制菜单。DataSession:控制表单(集)中的表是在当前工作期打开(1)还是私有工作期打开(2)。补充28表单的常用属性MaxButton:是否有最大化按钮。MinButton:是否有最小化按钮。Movable:控制表单能否被拖动。Name:对象的名称。ScaleMode:度量单位。WindowState:控制表单最大化(2)、最小化(1)还是正常态。WindowType:控制表单是模式的还是非模式的。模式表单:用户必须先关闭此表单才能访问应用程序中的其他界面。具体见教材P.19929设置对象的属性每个对象有许多属性。但有一些属性是只读的(斜体字)设计时设置属性值:即在“属性窗口”中设置对象属性。–在表单中先加入一些控件,选中某一控件。被选中对象的属性被分为四部分:数据:这些属性存储关于对象的数据环境信息和操作这些数据。方法程序:显示对象的事件。布局:对象位置和外观。其它:在此中存储自定义属性和一些特定属性。–“方法程序”属性的设置就是编辑代码,左键双击这些属性,就进入代码编辑框,来编辑响应事件的代码。在程序代码中,使用如下的语法对对象属性进行设置:引用对象(object).属性(property)=值补充30例:对同一个对象的多个属性的设置下列分别设置Text1文本框的value(指定当前状态),ForeColor(前景色)、BackColor(背景色)、FontName(字体),代码放在表单的Init事件中。THISFORM.Text1.Value=DATE()THISFORM.Text1.ForeColor=RGB(0,0,0)THISFORM.Text1.BackColor=RGB(192,192,192)THISFORM.Text1.FontName=黑体以上均为相对引用。补充316.5.2常用事件与方法Load事件–在创建对象前发生。–表单集的Load事件先于表单的Load事件。–在该事件发生时还没有创建任何控件对象,因此在此事件中不能有对控件进行处理的代码。Init事件:当创建对象时发生。–容器所包含的对象的Init事件在容器的Init事件之前发生。Destroy事件:当释放一个对象的实例时发生。–容器对象的Destroy事件在它所包含的任何一个对象的Destroy事件之前发生具体见教材P.18832表单事件Unload事件–在对象被释放时发生。–是释放表单或表单集的最后一个事件。Error事件:一个方法中有运行错误时发生。此两事件用于表单和表单集。具体见教材P.18833焦点事件GotFocus事件:当对象接收到焦点时发生。–当表单没有控制