1
第三章表单设计与应用
2
本章要点
3.1 面向对象的程序设计
3.2 创建表单
3.3 表单的属性、事件和方法
3.4 表单集与多重表单
3
3.1 面向对象的程序设计
对象( Object)
客观世界里的任何实体都可以被看作是对象 。 对象可以是具体的物,也可以指某些概念 。
从编程的角度来看,对象是一种将数据和操作过程结合在一起的数据结构,或者是一种具有属性(数据)
和方法(过程和函数)的集合体。事实上程序中的对象就是对客观世界中对象的一种抽象描述
( 1)对象属性:属性用来表示对象的状态。
( 2)对象方法:对象方法是描述对象行为的过程。
4
类、基类和子类
类( class)
类是对一类相似对象的性质描述,这些对象具有相同种类的属性以及方法。
子类与继承在面向对象的方法里,继承是指在基于现有的类创建新类时,新类继承了现有类的方法和属性 。 此外,可以为新类添加新的方法和属性 。 我们把新类称为现有类的子类,而把现有类称为新类的父类 。 一个子类的成员一般包括:
( 1) 从其父类继承的属性和方法 。
( 2)由子类自己定义的属性和方法。
5
类名 含义 类名 含义
L a be l 标签 L i s t B ox 列表框
T e x t B ox 文本框 S pi n n e r 微调
E di t B ox 编辑框 G r i d 表格
C om m a n d B u t t on 命令按钮 I m a g e 图像
C om m a n d G r ou p 命令按钮组 T i m e r 计时器
O pt i on G r ou p 选项按钮组 P a g e F r a m e 页框
C h e c k B ox 复选框 A c t i v e X C on t r ol A c t i v e X 控件
C om bo B ox 组合框
A c t i v e X B ou
C on t r ol A c t i v e X 绑定型
6
类名 含义 类名 含义
L i n e 线条 C on t r ol 控件
S h a pe 形状 P a g e 页
C on t a i n e r 容器 F or m 表单
S e pa r a t or 分割符 F or m S e t 表单集
H y pe r L i n k 超级链接 H e a de r (列)表头
A c t i v e D oc 活动文档 C u s t om 定制
C ol u m n (表格)列 T ool B a r 工具栏
7
容器与控件
Visual FoxPro 中的类一般可分为两种类型:容器类和控件类。相应地,可分别生成容器(对象)和控件(对象) 。
容器可以被认为是一种特殊的控件,它能包容其他的控件或容器控件是一个可以以图形化的方式显示出来,并能与用户进行交互的对象,控件类不能包含其它对象
8
对象的属性属性( Property),是描述对象的一项数据,用来描述对象的一个特性。
对象的属性值是由对象所基于的类决定的。对象值的设置可以在设计时通过属性窗口设置,也可以直接编进程序代码在运行的过程中设置,在程序中设置属性的一般格式是,表单名,对象名,属性名 =属性值例如,一个命令按钮控件的常用属性设置如表所示。
9
10
连续设置多个属性,可以使用 WITH…ENDWITH 结构一次为对象设置多个属性。
With结构如下所示:
WITH 对象语句块
ENDWITH
11
对象的方法
方法,封装在对象中的过程,但又不同于一般的过程 。 VFP的方法属于对象的内部函数,只用于完成某个特定任务的功能模块,方法的使用不像事件程序一般需要在某一事件发生时响应,而是在程序中直接调用 。 而不一定相应某事件 。 方法被封装在对象内部,不同的对象有不同的方法,根据需要用户可以根据需要自行建立新方法 。
方法的调用:
[[变量名 ]=]表单名,对象名,方法名()
12
VFP的常用方法
13
对象的事件
事件是一种由系统预先定义而由用户或系统发出的动作。事件作用于对象,对象识别事件并作出相应反应
与方法集可以无限扩展不同,事件集是固定的,用户不能定义新的事件 。
程序是由事件驱动的,因而,在执行过程中,
持续等待的是一个发生在对象上的事件(如用户的操作动作,如单击、双击鼠标等)
14
事件发生时具体完成什么任务则取决于用户在事件中编写的程序代码即事件过程。如单击某一个命令按钮将进行的操作就决定于在命令按钮中编写的事件过程(即程序代码) 事件过程除了由事件的激发而调用其程序代码外,也可以在程序运行中调用其代码,在程序中调用事件代码的格式是:
表单名,对象名,事件名
VFP编程的核心是为每个要处理的事件编写响应事件的程序代码,对象的事件名在代码窗口的过程列表框中。
15
Visual FoxPro中的常用事件
Init,创建对象时发生的事件 。
Destroy,从内存中释放对象时发生的事件 。
Click,鼠标左键单击对象时发生的事件 。
Dblclick,鼠标左键双击对象时发生的事件 。
Rightclick,鼠标右键单击对象时发生的事件 。
GotFocus,对象接收到焦点时发生的事件 。
LostFocus,对象失去焦点时发生的事件 。
KeyPress,当用户按下或释放键时发生的事件 。
InteractiveChange,以交互方式改变对象的值时发生的事件 。
ProgrammaticChange,以编程方式改变对象的值时发生的事件。
16
对象的引用
对象的包容层次
对象的引用
17
( 1)绝对引用:通过提供对象的完整容器层次来引用对象,从最高容器开始逐层向下直到某个对象为止的引用称为绝对引用。
Formset.Form.OptionGroup.Option.Enabled=.F.(使选项按钮组第一个选项控件无效 )
( 2)相对引用:从正在为编写事件代码的对象出发,通过逐层向高一层或低一层直到另一对象的引用称为相对引用,
18
【 例 】 如果 Form1 中 有 一 个 命 令 按 钮 组
commandgroup1,该命令按钮组有两个命令按钮,command1 和 command2,如果要在命令按钮 command1的事件 ( 如单击事件 ) 代码中修改该按钮的标题可用下列命令:
this.caption=”确定,
19
如果要在命令按钮 command1的事件代码中修改命令按钮
command2的标题可用下列命令:
thisform.Commandgroup1.command2.caption="
取消 "
或者 this.parent.command2.caption="取消 "
但不能写成下列命令:
thisform.command2,caption="取消 "
如果要在命令按钮 command1的事件代码中修改表单的标题可用下列命令:
This.Parent.parent.Caption=”测试窗口,
或者 thisform.caption=”测试窗口,
20
P a r e n t 该对象的直接容器
T h i s 该对象
T h i s F o r m 包含该对象的表单
T h i s F o r m S e t 包含该对象的表单集
A c ti v e C o n tr o l 当前活动表单中具有焦点的控件
A c ti v e F o r m 当前活动表单
A c ti v e P a g e 当前活动表单中的活动页引用对象的属性和关键字
21
3.2 创建表单表单 (Form)是 Visual FoxPro提供的用于建立应用程序界面的最主要的工具之一,在 VFP中是一个容器,可以容纳
VFP的绝大部分对象。表单相当于 WINDOWS应用程序的窗口。表单可以属于某个项目,也可以游离于任何项目之外,它是一个特殊的磁盘文件,其扩展名为,scx。 在项目管理器中创建的表单自动隶属于该项目。
创建表单一般有两种途径:
使用表单向导创建简易的数据表单;
使用表单设计器创建或修改任何形式的表单。
22
使用表单向导启动表单向导有以下四种途径:
( 1) 打开,项目管理器,,选择,文档,选项卡,从中选择,表单,。 然后单击,新建,按钮 。 在弹出的,新建表单,对话框中单击,表单向导,按钮 。
( 2) 在系统菜单中选择 【 文件 】 |【 新建 】 命令,
或者单击工具栏上的,新建,按钮,打开,新建,对话框,在文件类型栏中选择,表单,。
然后单击,向导,按钮 。
23
( 3) 在系统菜单中选择 【 工具 】 |【 向导 】 |
【 表单 】 命令 。
( 4)直接单击常用工具栏上的“表单向导”图标按钮。
按步骤依照,表单向导,完成一对多表表单的设计
24
25
使用表单设计器启动表单设计器有多种方法:
● 菜单方法:若是新建表单,在系统菜单中选择 【 文件 】 |【 新建 】,在文件类型对话框中选择,表单,,单击,新建文件,按钮;若是修改表单,则单击 【 文件 】 |【 打开 】,在打开对话框中选择要修改的表单文件名,单击,打开,按钮 。
26
命令方法,在 COMMAND窗口输入如下命令:
CREATE FORM <文件名 > &&创建新的表单
MODIFY FORM <文件名 > &&打开一个已有的表单在项目管理器中,先选择文档标签,然后选择表单,单击新建按钮。若是修改表单,选择要修改的表单,单击“修改”按钮。
27
表单设计器环境介绍
( 1)设计器窗口
“表单设计器”窗口内包含正在设计的表单。用户可在表单窗口中可视化地添加和修改控件、改变控件布局,表单窗口只能在“表单设计器”窗口内移动。以新建方式启动表单设计器时,系统将默认为用户创建一个空白表单,如图左侧部分 。
28
( 2) 属性窗口设计表单的绝大多数工作都是在属性窗口中完成的,因此用户必须熟悉属性窗口的用法 。 如果在表单设计器中没有出现属性窗口,可在系统菜单中单击 【 显示 】 |
【 属性 】,属性窗口如图所示 。
页框选项卡
“对象”下拉列表框图属性设置框
29
( 3) 表单控件 工具栏设计表单的主要任务就是利用
,表单控件,设计交互式用户界面。
“表单控件”工具栏是表单设计的 主要 工具。默认包含
21个控件,4个辅助按钮,如图所示
30
4) 表单 设计 器工具栏打开,表单设计器,时,主窗口中会自动出现
,表单设计器,工具栏,如图所示
31
表单的数据环境(一个容器)
1,打开数据环境设计器表单设计器环境下,单击,表单设计器,工具栏上的,数据环境,按钮,或选择 【 显示 】 |
【 数据环境 】 命令,即可打开,数据环境设计器,窗口,此时,系统菜单栏上将出现,数据环境,菜单 。
2,数据环境的常用属性常用的两个数据环境属性是 AutoOpenTables和
AutoCloseTables
32
3.向数据环境添加表或视图。在数据环境设计器环境下,按下列方法向数据环境添加表或视图:
在系统菜单中选择 【 数据环境 】 |【 添加 】 命令,或右键单击,数据环境设计器窗口,,然后在弹出的快捷菜单中选择 【 添加 】 命令,打开,添加表或视图,对话框,如图所示 。 如果数据环境原来是空的,那么在打开数据环境设计器时,该对话框就会自动出现 。
33
选择所需表,单击,添加,
34
4,从数据环境中移去表或视图在“数据环境设计器”窗口中,选择要移去的表或视图,
在系统菜单中选择【数据环境】 |【移去】命令。也可以用鼠标右键单击要移去的表或视图,然后在弹出的快捷菜单中选择【移去】命令。
5,在数据环境中设置关系设置关系的方法为:将主表的某个字段 ( 作为关联表达式 ) 拖曳到子表的相匹配的索引标记上即可 。 如果子表上没有与主表字段相匹配的索引,也可以将主表字段拖动到子表的某个字段上,这时应根据系统提示确认创建索引
35
常用的关系属性有:
● RelationalExpr,用于指定基于主表的关联表达式 。
● ParentAlias,用于指明主表的别名 。
● ChildAlias,用于指明子表的别名 。
● ChildOrder,用于指定与关联表达式相匹配的索引 。
● OneToMany,用于指明关系是否为一对多关系,该属性默认为,,F.”,如果关系为,一对多关系,,该属性一定要设置为,,T.”。
36
3.3 表单的属性、事件和方法
3.3.1 表单的属性
37
当前表单文件名对象选择列表框对象属性分类页对象属性设置对象属性选项列表对象属性说明框
38
表单文件的执行和关闭
1.在设计时运行表单在设计时可采用以下方法运行表单文件:
( 1) 在项目管理器窗口中,选择要运行的表单,然后单击,运行,按钮 。
( 2) 在表单设计器窗口中,在系统菜单中选择 【 表单 】
|【 执行表单 】 命令,或单击常用工具栏上的,运行,
按钮 。
( 3) 在系统菜单中 选择 【 程序 】 |【 运行 】 命令,打开
,运行,对话框,然后在运行对话框中选择要运行的表单文件,单击,运行,按钮 。
( 4)在命令窗口输入命令,DO FORM <表单文件名 > 。
( 5)单击鼠标右键运行表单。
39
2,在程序中调用表单在程序中调用表单可用下列命令:
DO FORM 表单文件名 |? [ NAME 变量名 ][LINKED] [WITH 参数表 ] [TO 变量 ] [NOREAD]
[NOSHOW]
● [NAME 变量名 ],如果包含 NAME子句,系统将建立指定名字的变量,并使它指向表单对象 。
否则,系统将建立与表单文件名相同的变量,
并使它指向表单对象 。
40
● [LINKED]关键字:如果包含 LINKED关键字,表单和表单对象变量将链接起来,这时,表单对象将随指向它的变量的清除而关闭
( 释放 ),否则,即使变量已经清除 ( 如超出作用域,用
RELEASE命令清除 ),表单对象依然存在 。 但不管有没有
LINKED关键字,指向表单对象的变量并不会随表单的关闭而清除 。
● [TO 变量 ],用于从模式表单返回值 。
● [WITH 参数表 ],用于向表单传递参数 。
● [NOSHOW],如果包含 NOSHOW关键字,表单运行时将不显示,直到将表单的 Visible属性被设置为,T.,或者调用表单的
Show方法 。
● [NOREAD],创建并显示表单集,但在执行 READ命令前没有被激活,NOREAD要求表单集对象的 WindowType属性设置为 2。
41
3.4 表单集与多重表单
子表单,包含在另一个窗口中,用于创建 MDI
应用程序的表单。
子表单不可移至父表单(主表单)边界之外,
当其最小化时将显示在父表单的底部。若父表单最小化,则子表单也一同最小化。
42
浮动表单,属于父表单(主表单)的一部分,
但并不是包含在父表单中。
浮动表单可以被移至屏幕的任何位置,但不能在父窗口后台移动。若将浮动表单最小化时,
它将显示在桌面的底部。若父表单最小化,则浮动表单也一同最小化。浮动表单也可用于创建 MDI 应用程序。
43
顶层表单,没有父表单的独立表单,用于创建一个 SDI 应用程序,或用作 MDI
应用程序中其他子表单的父表单。
顶层表单与其他 Windows 应用程序同级,
可出现在其前台或后台,并且显示在
Windows 任务栏中。