1、第七章 表单设计,本 章 要 点,面向对象的基本概念 对象的操作 建立简单的应用程序步骤 表单操作 表单控件1 无控件表单 2 “标签”控件3 “计时器”控件 4 “命令按钮”控件5 “命令按钮组”控件 6 “文本框”控件 7 “单选按钮”控件 8 “复选框”控件 9 “微调”控件 10 “图像”控件 11 设计多页表单 12 “组合框”控件13 “表格”控件,面向对象的基本概念,1对象(1)对象对象(Object)是客观存在的任何实体。每个对象都具有描述它的特征的属性及附属于它的行为。对象把事物的属性和行为封装在一起,是一个动态的概念。对象是面向对象编程的基本元素,是“类”的具体实例。对象大
2、多数是可见的,也有一些特殊的对象是不可见的。(2)对象的三要素1)属性 属性(Attribute)是用来描述和反映对象特征的参数。对象的每一种属性,都有与其它对象加以区别的特性,都具有一定的含义,并赋予一定的值。在Visual FoxPro系统中,各种对象拥有70多个属性。对象的属性可以在设计对象时定义,也可以在对象运行时进行设置。 访问格式:对象引用.属性名,常用的表单属性,2)方法 方法(Method)是附属于对象的行为和动作。即将一些通用的过程编写好并封装起来,作为方法供用户直接调用。调用格式:对象引用.方法名 (参数名表)常用的方法有:Cls 清除表单中的图形与文本Hide 通过修改V
3、isable属性来隐藏表单(集)或工具栏Refersh 重新绘制表单或控件并刷新所有值Release 从内存中释放表单或表单集Show 显示表单并确定表单是模态的还是非模态的3)事件 事件(Event) 是每个对象可能用以识别和响应的某些行为和动作。它发生在用户与应用程序交互时。如单击控件、鼠标移动、键盘按下等。在Visual FoxPro系统中,对象可以响应50多种事件。多数情况下,事件是通过用户的操作行为引发的,当事件发生时,将执行包含在事件过程中的全部代码。常用的核心事件见下表:,注意:Load、Init、Destroy、Unload事件的引发先后次序为: Load Init Destr
4、oy Unload,(3)对象的引用在面向对象的程序设计中,要引用其中的某个对象,必须指出对象在嵌套层次中的位置,如同我们标识一个文件一样。,如:ThisForm.Caption=“欢迎使用“,2类所谓类(Class),就是一组相似对象的属性和行为特征的抽象描述。或者说,类是具有共同属性、共同操作性质的对象的集合。在Visual FoxPro系统中,类就像是一个模板,对象都是由类生成的,类定义了对象所有的属性、事件和方法,从而决定了对象的属性和它的行为。Visual FoxPro系统为用户提供的32个基类见下表:,(1)基类基类又可以分成容器类和控件类。容器类可以容纳其它对象,并允许访问所包含
5、的对象。如表单,自身是一个对象,它又可以把按钮、编辑框、文本框等放在表单中。 控件类不能容纳其它对象,它没有容器类灵活。如文本,自身是一个对象,在文本中不可放其它对象。由控件类创造的对象,是不能单独使用和修改的,它只能做为容器类中的一个元素。,(2)类的特性类具有继承性、封装性和多态性等特性。继承性指通过继承关系利用已有的类构造新类。任何一个基类都有它的属性。即使用户没有定义,Visual FoxPro系统也赋给基类相应的缺省值。在创造对象时,可以利用基类派生出另一个新类。通常把从已有的类派生出的新类称为子类,已有的类称为父类。子类不但具有父类的全部属性和方法,而且还允许用户根据需要修改对已有
6、的属性和方法进行修改或添加新的属性和方法。在Visual FoxPro系统中允许用户按照已有的类派生出多个子类来。在父类的基础上派生子类,在子类的基础上再派生子类,如此循环,可以在已有的类中派生出多个新类。在每一次的操作中,子类都会从父类中继承父类已有的属性和方法,这就是类的继承性的体现。有了类的继承,用户在编写程序时,可以把具有普遍意义的类通过继承引用到程序中,从而减少代码的编写工作。,父类,子类,子类,继承性,继承的方法与属性,添加的方法与属性,方法,属性,封装性类的封装性是指类的内部信息对用户是隐蔽的。 在类的引用过程中,用户只能看到封装界面上的信息,对象的内部信息(数据结构及操作范围、
7、对象间的相互作用等)则是隐蔽的,只有程序开发者才了解类的内部信息。 由于类具有封装性,因此不必被类的概念或类的抽象所困扰。在使用类时,用户不需熟悉对象内部的复杂性,只需掌握类的使用方法。正如你在使用照相机照相时,无需了解照相机是怎样设计的和内部构造,只要会使用即可。类的封装性使应用程序的可用性大大提高了。,对象的操作,类是对象的抽象,对象是类的实例。因此,对象的过程代码的设计是最重要的操作之一。我们可以利用程序代码,在类的基础上派生出对象的属性、方法和事件,或进行重新设计。对象的属性、方法和事件决定了对象的操作功能,下面将介绍一些有关对象的基本操作的代码。1.由类创建对象对象是在类的基础上派生
8、出来的,而只有具体的对象,才能实现类的事件或方法的操作。可使用函数:CREATEOBJECT()创建对象。命令格式如下:对象名=CREATEOBJECT(类名)如:FORM1=CREATEOBJECT(“FORM“) 注意:如是通过自定义类库而不是基类创建对象,则必须用SET CLASSLIB TO 打开才能使用。,2.设置对象的属性设置代码的语法如下:对象的父类名.当前对象名.属性名=属性值如:FORM1.CAPTION=“演示表单“FORM1.NAME=“FORM1“由于每个对象可以有多个属性,进行设置时写出全部路径非常麻烦,所以Visual FoxPro系统还给我们提供了另一个设置对象属
9、性值的语句。其格式为:WITH ENDWITH,3.调用对象的方法和触发对象的事件(1)调用对象的方法调用对象的方法为:父类名.对象名.方法名如:FORM1.SHOW(1)(2)触发对象的事件事件与方法不同,只有当事件发生后,对应的事件代码被执行。可以通过命令按钮触发事件;或使用鼠标产生单击、双击和移动、拖放等事件;或使用Keyboard命令产生Keypress事件。,1.建立用户界面的对象建立、选定、复制、删除、命名 2.设置数据环境 3.设置对象属性 4.对对象的事件过程编程 5.程序运行和调试 6.保存文件,建立简单的应用程序步骤,表单操作,表单(Form)在系统中是用户的主要界面,也有
10、人把它称为屏幕(Screen)或窗口。但它不是一个普通的窗口,因为其中的控件可以有属性、事件和方法,并且表单和表单集本身也是有属性、事件和方法的编程对象。在Visual FoxPro 系统中,表单拥有多个属性,可以响应多种事件、实现多种方法操作。表单为数据库信息的显示、输入和编辑提供了非常简便的方法,表单的设计是可视化编程的基础。表单的建立是一个全新的领域。在建立表单的过程中,要定义控件的属性、确定事件或方法的代码。前面我们曾讲过,在面向对象的程序设计中,两个最基本的可视对象类型是容器和控件。表单就是一个容器,它可以容纳多个控件。,1.用表单设计器建立表单使用系统提供的表单设计器创建新的表单,
11、可以在菜单方式或命令方式下进行。方法一:菜单方式打开“文件”菜单,选择“新建”;在“新建”窗口,选择“表单”,再按“新建文件”按钮,进入“表单设计器”窗口;,打开“显示”菜单,完成对表单属性、事件和方法的定义:再选择“保存”,表单建立完成。方法二:命令方式命令格式如下:CREATE FORM ,表单的建立,“表单设计器”窗口,“属性”窗口,“表单控件”工具栏,“表单设计器” 工具栏,“表单”菜单,空白表单,表单设计器窗口,2.用表单向导建立表单 (1)用表单向导创建单表表单打开“文件”菜单,选择“新建”,在“新建”窗口,选择“表单”,再按“向导”按钮,进入“向导选取”窗口;在“向导选取”窗口,
12、选择“表单向导”项,系统将提供单表表单向导,按步骤依照“表单向导”完成对单表表单的设计。 (2)用表单向导创建一对多表表单打开“文件”菜单,选择“新建”,在“新建”窗口,选择“表单”,再按“向导”按钮,进入“向导选取”窗口;在“向导选取”窗口,选择“表单向导”项,系统将提供一对多表表单向导,按步骤依照“表单向导”完成一对多表表单的设计。,表单的运行与修改,表单一旦建立完成,表单及表单中对象的属性、方法和事件就已确定。用户可以运行查看效果,如果对已有的对象的属性、方法和事件不满意,可以进行修改。 1.运行表单(1)在表单设计器中运行表单在“表单设计器”窗口,单击鼠标右键,在“表单”快捷菜单中,选
13、择“执行表单”。(2)以命令方式运行表单命令格式:DO FORM 2.修改表单(1)用表单设计器修改表单单击“文件”菜单,选择“打开”;在“打开”窗口中,选择路径、文件类型及“表单名”后单击“确定”。(2)以命令方式修改表单命令格式:MODIFY FORM ,表单控件,设计无控件表单表单示意图:,1.控件的基本操作在表单设计器环境下,经常需要对表单上添加控件或对控件进行移动、改变大小、复制、删除等操作。(1)添加控件 单击控件工具栏中控件,再在表单中单击或拖放(2) 选定控件 单击控件、拖动鼠标使出现的框围住要选的控件、按住Shift的同时,依次单击各控件。(3) 移动控件拖动(拖动时按住Ct
14、rl键,可以使鼠标的移动步长减小)、方向键。(4) 调整控件大小(5) 复制控件“复制”后“粘贴” (6) 删除控件选定后按Delete键,控件的操作与布局,2. 控件的布局利用“布局”工具栏中的按钮,可以方便地调整表单窗口中被选控件的对齐方式、相对大小或位置。“布局”工具栏可以通过单击表单设计器工具栏上的“布局工具栏”按钮或选择“显示”菜单中的“布局工具栏”命令打开或关闭。 3. 设置Tab键次序当表单运行时,用户可以按Tab键选择表单中的控件,使焦点在控件间移动。控件的Tab次序决定了选择控件的次序。Visual FoxPro提供了两种方式来设置Tab键次序:交互方式和列表方式。可以通过下
15、列方法选择自己要使用的设置方式:(1)选择“工具”菜单中的“选项”命令,打开“选项”对话框。(2) 选择“表单”选项卡。(3) 在“Tab键次序”下拉列表框中选择“交互”或“按列表”。,设计“标签”控件表单,标签,标签,标签,“标签”控件用于在表单上显示文本信息,被显示的文本在Caption属性中指定。标签的标题不能在屏幕上直接编辑修改,但可以在代码中间接修改。标签标题文本最多可包含的字符数目是256。“标签”控件具有自己的一套属性、方法和事件,常用的标签属性Caption性、Alignment属性及颜色、字体、大小等。表单示意图:,设计“计时器”控件表单,计时器,“计时器”控件允许在指定时间
16、内周期性地自动地执行其Timer事件代码。计时器在表单设计过程中是可见的,但在运行时不可见,它的位置和大小都无关紧要。“计时器”控件主要有两个属性,即Interval属性和Enabled属性。Interval属性用于定义两次计时器事件触发的时间间隔(毫秒级);Enabled属性为真(.T.)表示启动计时器,Enabled=.F.表示终止计时器。表单示意图:,设计“命令按钮”控件表单,命令按钮,命令按钮,表单示意图:,设计“命令按钮组”控件表单,命令 按钮组,表单示意图:,设计“文本框”控件表单,文本框,表单示意图:,设计“单选按钮”控件表单,单选按钮,表单示意图:,设计“复选框”控件表单,复选
17、框允许同时选择多项,当处于“真”状态时,复选框内显示一个对勾();否则,复选框内为空白。主要属性:1Value属性用来指明复选框的当前状态。复选框的Value属性值的设置有如下三种情况: 0或.F. 未被选中(默认) 1或.T. 被选中 2 灰色,只能通过代码设置2Style属性复选框的外观:0 方框按钮(标准样式,默认值),右侧显示Caption文本,选中出现“”标记。1 图形按钮,在Picture属性指定为图形时,Caption文本图形下方,选中按钮呈按下。若Picture属性未指定为图形时,为文本按钮。,复选框,复选框表单设计示例,设计“微调”控件表单,微调,“微调”控件可在控件框中输入
18、或选择一个值,主要属性有:KeyBoardHighValue、 KeyBoardLowValue、Increment、Value,分别用于表示:最大值、最小值、增减值与初始值。事件:Interactivechange。表单示意图:,设计“图像”控件表单,图像,“图像”控件主要用于把.BMP、.GIF、JPG类型的文件添加到表单上,“图像”控件可以在程序运行的动态过程中加以改变。“图像”控件的“Stretch”属性定义了图像的三种显示方式:当“Stretch”属性值为“0时”,将把图像的超出部分裁剪掉;当“Stretch”属性值为“l”时,等比例填充;当“Stretch”属性值为“2”时,变比例
19、填充。表单示意图:,设计多页表单,多页,表单示意图:,设计“组合框”控件表单,列表框在任何时候都能看到多个条目;而在下拉列表中,用户只能看到一个条目,单击向下的按钮可显示滚动的下拉列表框。而组合框用户可以单击下拉组合框上的按钮查看选择项的列表,也可直接在按钮旁边的框中直接输入一个新项。表单示意图:,它们常用的属性和方法有:1RowSourceType属性与RowSource属性这两个属性在设计和运行时可用。RowSourceType属性指明列表框条目中数据源的类型,RowSource属性指定列表框的条目数据源。RowSourceType属性的取值范围及含义如下表所示。,(续表),2List属性
20、 用以存取框中数据条目的字符串数组。如:(1)读取列表框中第3个条目第1列上的数据项。Var= ThisForm.mylist.lsit(3)(2)重新将列表框中第3个条目第2列上的数据项设置为“OK”。This.Form.mylist.list(3,2)=”OK” 3ListCount属性指明列表框中数据条目的数目。 4ColumnCount属性指定列表框的列数。 5Value属性返回列表框中被选中的条目。该属性可以是数值型,也可以是字符型。若为数值型,返回的是被选条目在列表框中的次序号。若为字符型,返回的是被选条目的本身内容,如果列表框不止一列,则返回由BoundColumn属性指明的列上
21、的数据项。6ControlSource属性可指定一个字段或变量用以保存用户从列表框中选择的结果。,7Selected属性指定列表框内的某个条目是否处于选定状态。比如下面代码用以判断第三个条目是否被选中。If ThisForm.List1.Selected(3)WAIT “已被选中!“ WINDElseWAIT “未被选中!“ WINDEndif8MultiSelect属性指定用户能否在列表框控件内进行多重选定。该属性的设置情况为:0或.F.,不允许多重选择(默认);1或.T.,允许多重选择。该属性在设计时可用,在运行时可读写,仅适用于列表框。 9AddItem方法给RowSourceType属
22、性为0的列表中添加一项。如:ThisForm.List.RowSourceType=0ThisForm.List.AddItem(“联想“)ThisForm.List.AddItem(“浪潮“) 10RemoveItem方法从RowSourceType属性为0的列表中删除一项。如:ThisForm.List. RemoveItem(ThisForm.List. listindex),设计“表格”控件表单,表格是一种二维表形式的容器对象。一个表格对象由若干列对象(Column)组成,每个列对象包含一个标头对象(Header)和若干控件。表格、列、标头和控件都有自己的属性、事件和方法。 1表格设计
23、基本操作一旦指定了表格的列的具体数目(表格的ColumnCount属性值不是-1),就可以有两种方法来调整表格的行高和列宽。一是通过设置表格的HeaderHeight和RowHeight属性调整行高、通过设置列对象的Width属性调整列宽;二是让表格处于编辑状态下,然后通过鼠标拖动操作可视地调整表格的行高和列宽。要切换到表格编辑状态,可选择表格快捷菜单中的“编辑”命令,或在属性窗口的对象框中选择表格的一列。此时表格的周围有一个粗框。在表格编辑状态下,将鼠标指针置于两表格列的标头之间或左侧的第一个按钮和第二个按钮之间,当鼠标指针变成水平双箭头或垂直双箭头的形状时拖动鼠标,可调整列宽或行高。,表格
24、设计也可以调用表格生成器来进行。通过表格生成器能够交互式地快速设置表格的有关属性,创建所需要的表格。使用生成器生成表格的步骤是:(1)通过“表单控件”工具栏在表由上放置一个表格;(2)用鼠标右键单击表格并在弹出的快捷菜单中选择“生成器”命令,打开“表格生成器”对话框。对话框包括四个选项卡,其作用大致如下:“表格项”选项卡:指明要在表格内显示的字段。“样式”选项卡指定表格的样式,如标准型、专业型、账务型等。“布局”选项卡:指明各列的标题和控件类型、调整各列列宽。“关系”选项卡:设置一个一对多关系,指明父表中的关键字段与子表中的相关索引。 (3)在对话框内设置有关选项参数。当设置完后按“确定”键关
25、闭对话框返回时,系统就会根据指定的选项参数设置表格的属性。,2常用的表格属性(1)RecordSourceType属性与RecordSource属性RecordSourceType属性指明表格数据源的类型,RecordSourceType属性的取值范围及含义如下表所示。,必须由INTO CURSOR ,RecordSource属性指定表格数据源。设置了表格的RecordSource属性后,可以通过ControlSource属性为表格中的一列指定它所要显示的内容,如果不指定,该列将显示表格数据源中下一个还没有显示的字段。(2)ColumnCount属性指定表格的列数,也即一个表格对象所包含的列对
26、象的数目。该属性的默认值为-1,此时表格将创建足够多的列来显示数据源中的所有字段。 3常用的列属性(1)ControlSource属性指定要在列中显示的数据源,常见的是表中的一个字段。(2)CurrentControl属性指定列对象中的一个控件,该控件用以显示和接收列中活动单元格的数据。列中非活动单元格的数据将在缺省的TextBox中显示。缺省情况下,表格中的一个具体列对象包含一个标头对象(名称为Headerl)和一个文本框对象(名称为Textl),而,CurrentControl属性的默认值就是文本框Textl。用户可以根据需要往列对象中添加所需要的控件,并将CurrentControl属性
27、设置为其中的某个控件。比如,可以用复选框来显示和接收逻辑型字段的数据。(3)Sparse属性用于确定CurrentControl属性是影响列中的所有单元格还是只影响活动单元格。默认值为.T. ,如果属性值为.F.,列中所有的单元格都使用CurrentControl属性指定的控件显示数据,活动单元格可接收数据。 4常用的标头(Header)属性(1)Caption属性指定标头对象的标题文本,显示于列顶部。(2)Alignment属性指定标题文本在对象中显示的对齐方式。在默认方式(属性值为3)下,对齐方式基于控件数据源的数据类型:数值型数据右对齐,其他类型数据左对齐。,表格,表格表单设计示例,思考
28、题,1什么是对象、类、属性、事件和方法? 2常用的基类有哪些? 3叙述类的继承性和封装性的主要特征。 4如何设置对象的属性? 5什么是表单? 6表单在应用系统中的地位如何? 7设计表单有几种方法,优点是什么? 8表单常用的控制有哪些? 9表单控件属性如何定义,有几种方法? 10表单控件的事件和方法如何定义,有几种方法? 11利用表单向导创建的表单有何局限?,实验题,1.使用命令按钮组设置一个如图所示的简易计算器。,2.设置一个如图所示的计时器,能够设置倒计时的时间,并进行倒计时,3.设计一个如图所示的“选取或替换“表单。单击“确定“按钮时,如果“选取或替换“复选框处于选中状态,那么就将文本框内容设置成编辑框中的选定内容,否则,就用文本框的内容去替换编辑框中的选定内容。,