第 9章 表单设计与应用
表单的建立与运行
表单的操作
常用表单控件
表单的应用
9.1 表单的建立与运行
表单 (Form)是 VFP的特色所在,内容丰富,
功能强大,是开发信息系统的强有力工具。所谓
表单,实际上是一种容器,其中可以加入 VFP中的
很多其他对象,应用系统通常使用表单作为数据
操作的一个窗口,用户通过表单对数据库中的数
据进行查询、插入、删除、统计及其他操作。表
单设计的好坏,对整个应用系统的优劣有很大关
系。 VFP中提供了强有力的表单设计手段,用户通
过可视化的设计方法,能够方便地定义表单中的
各种对象、对象的属性、对象的方法。学习掌握
了表单的设计方法后,将对 VFP的功能、开发方法
以及面向对象的方法有一个更深刻的认识
图 9-1 表单设计窗
图 9-2 表单运行窗口示例
9.1.1 用表单设计器建立表单
? 从 OOP的观点考察,表单是一种容器对象,
它由 VFP 的基类 Form派生而成,并以独
立的文件形式存储。所谓表单设计,实
际上就是对这个容器对象本身及其所包
含的对象的设计
? 1,表单设计窗口简介
? 如图 9-3,表单设计窗口的最上面为菜单
栏,中心区域为一个表单,还可能有一
个属性设置窗口,一个控件工具框
图 9-3 表单设计窗口
? ( 1) 菜单栏
? 进入表单设计窗口后,菜单栏共有, 文
件,,, 编辑,,, 显示,,, 格式,,
,表单,,, 工具,,, 程序,,, 帮
助, 等九个菜单栏选项,用鼠标单击每
一个菜单栏选项都会弹出一个下拉式菜
单,每个下拉式菜单又包含了一些菜单

? ( 2) 控件工具框
? VFP 用可视化的方法为表单设计者提供
的一个可使用的, 类, 清单,设计者可
以用鼠标选中框中的类并用拖放的方法
在表单中派生各种对象
? 类以类库文件的形式存储,并且一个类
库文件可以存储多个类,控件工具栏在
任何时候只显示一个类库文件所包含的
类及一个类库文件按扭,应用该按扭可
以指定类库文件
? 通常情况下,控件工具栏中显示的是
VFP 中的基类,设计者可以使用类库文
件选择按钮指定自己所需要的类文件
? 如果控件工具栏没有出现时, 可以使用
以下步骤恢复,
– 在 VFP 的菜单栏中,选择, 显示, 菜单
中的, 工具, 选项,并在下拉列表框中
选中, 表单控件,
图 9-4 表单控
件工具栏
? 用新建表单文件和打开表单文件两种方
法都可以进入表单设计窗口, 具体操作
都是对 VFP 的菜单栏进行的操作,
? 方法一:选择, 文件, 菜单中, 新建,
选项, 指定文件类型为, 表单,, 并单
击, 新建表单, 按扭 。
? 方法二:选择, 文件, 菜单中, 打开,
选项,指定文件类型为, 表单,,并在
文件打开对话框中指定对应的表单文件
2.表单控件工具 框 的初步认识
? 表单控件工具框为我们提供了 VFP中的各种控
件。 所谓控件,实际上就是各种派生对象的
,父类, 。
? ( 1) 怎样在表单中加入一个对象
? 首先将鼠标在控件工具框移动到所需要的控件,
并单击鼠标主按扭,然后到表单的相应位置拖
放出一个图形,就在表单中加入了一个继承了
所选控件的全部属性和方法程序的对象
? ( 2) 怎样选择自己所需要的控件集
? 如果所需要的控件不在当前表单控件工
具框中, 就要重新指定工具框对应, 类
库, 文件,
– 用鼠标指向表单控件工具框中, 查看类, 的
命令按扭, 单击鼠标主按扭, 选择, 添加,,
在打开的对话框中选择所需要的类文件 。
– 在上述步骤中选择, 常用, 可以恢复标准控
件(基类)。
? ( 3) 常用控件的初步认识
? 常用控件就是 VFP 为开发者提供的基类
? 标签控件 ( LABEL),不能绑定数据,
只能起提示作用 。 在图 9-2所示的表单中,
编号是一个基于标签类的对象, 作用是
提示随后的数据是教师的编号 。
? 命令按钮( command),在应用系统
中,命令按钮是交互的主要工具,人们
通过按钮向应用系统发布操作命令,按
钮通过执行其方法程序响应人们的命令。
? 命令组 (command group):关于命令的容
器, 图 9-2所示的表单中, 右侧就是一个命令按
扭组, 由, 表首,,, 表尾,,, 向前,,
,向后,,, 添加,,, 删除,,, 退出, 等
7个命令按钮组成 。
? 选项按钮组 ( option group),选项按钮即
一般所称的单选按钮, 是构成交互式界面的有
力工具 。
? 文本框( text box),文本框是一种基本控
件,它可以捆绑关系数据表的一个非备注型字
段数据,从而实现通过文本框对象对数据表的
字段增加和修改的目的。
? 编辑框 ( edit box),编辑框可以绑定一
个关系表中的备注型字段数据 。
? 组合框 ( combobox),组合框兼有列表框
和文本框的功能 。 它有下拉组合框和下拉列表
框两种形式 。 组合框可以绑定数据表中的一个
或多个字段 。
? 列表框 ( list box),与组合框类似 。
? 复选框( check box),复选框也是构成交
互式操作界面的有力工具。复选和选项按钮的
的差别是:服选按钮可以兼选,而选项按钮只
能单选。
? 微调按钮 ( spinner),用户可以使
用微调按钮对对其所绑定的整数型字段
数据进行维护 。
? 表格 ( grid),表单中一种功能强大
的控件 。 可以绑定指定的数据表, 从而
实现通过表格对象对数据表的进行维护
的目的
? 计时器( timer),可以定时执行某种
操作
? 3,表单中的对象设计
? 所谓对象设计, 实际上一般是设计表单中的对
象 。
? ( 1) 向表单中加入对象
? 把对象的, 父类, 加入到表单控件工具框, 如果
对象的父类已在当前的表单工具框中就省略这个
步骤 。
? 从表单控件工具框中选定所需要的控件,并将其
派生对象加入到表单中。加入表单后该对象将继
承所选择控件的全部特征,名称以对象所属的
,基类, (不是, 父类, )名加上数字编号组成,
对象名称可以重新设定。
? ( 2) 删除表单中的对象
? 把鼠标移到要删除的对象上,单击辅按
扭,选择, 剪切,,即可删除这个对象。
注意,如果是由一个容器控件(如自定
义的命令组子类)派生而成的一个容器
对象,则不能删除该容器对象中的某成
员对象,只能删除容器整体
? ( 3) 在表单
中进行对象属
性设定
? 将鼠标移到要
设置属性的对
象上,单击辅
按扭,选择
,属性,,就
进入属性设置
窗口(见图 9-
5), 图 9-5
? ( 4) 为表单中的对象设计代码
? 将鼠标移到要添加代码的对象上, 单击辅按扭,
选择, 代码,, 出现代码设计窗口, 选择要设
计代码的事件, 然后在代码框中编写代码 。
? 为表单对象设计的事件代码要注意两点,
? 事件代码仅仅是一个过程, 一般不要把诸如文件
的打开, 关闭等操作都写在事件代码中, 这些工
作有其他过程完成;
? 为一个对象设计了事件代码后, 该对象从其父类
那里继承的同事件代码就永远无法活跃了, 如果
只是对原来的代码增加一些功能, 应该在新设计
的代码中加入语句,
? DoDefault()
? 1,表单设计的基本步骤
? ( 1) 进行规划, 最好画一张草图, 在上
面标出各对象的位置, 标题, 所属父类,
对象的大致作用, 表单中要使用的数据表,
数据表间的对应关系以及对象间的相互协
调与支持;
? ( 2)进入表单设计窗口
? (3) 如果表单要使用到数据表, 需要首先
为表单建立, 数据环境, 。 数据环境也
是 VFP 中的一种对象, 建立数据环境的
步骤是,
? 将鼠标移到表单的任一空白位置 ( 不能指向任何
对象 ), 单击辅按扭, 选择, 数据环境,
? 选择与表单对应的数据表, 单击, 添加, 按钮,
选中的数据表会加入到数据环境设计器中 。 如果
要加入多个表, 应重复这一过程, 然后单击, 关
闭, 按钮退出数据表的加入操作
? 在数据环境设计器中建立表间的关联关系
? (4) 在表单中加入其他对象并进行布局
排列,
– 表单标题放在整个表单的上方
– 命令按钮放在下面或右侧
– 文本框对象要与其对应的标签对象放
在一起
– 布局的目的是为了美观、清晰。表单
中的对象是可以用鼠标直接拖动的
( 5) 建立对象与数据表的对应关系 。 建立这类
对象与数据表字段的关联的方法是,
? 文本框, 编辑框, 列表框
对于这些非容器类的对象, 设定其与数据表
对应字段的关联时, 只需要将其 ControlSource
属性设置为数据表的对应字段名即可 。 在表单
中 加 入 了 数 据 环 境 对 象 后, 这 些 对 象 的
ControlSource 属性对应一个下拉列表框, 从列
表项选择一个字段与对象关联 。
? 表格
表格是一种容器对象,其成员对象是列,
默认的对象名是 Column1,Column2 等,而列
也是一个容器对象,其成员对象是 Header 和
Text
? 表格的设置比较麻烦,可
以使用生成器,
1)将鼠标移到表格对象上,单击鼠标
辅按扭,选择“生成器”
2) 选择, 表格项, 选项卡, 在对应
的窗口选择表格数据表, 数据字段;
3) 选择, 样式, 选项卡 ( 会出现新
界面, 图从略 ), 选择喜欢的表格
样式, 一般采用系统默认状态即可;
4) 选择, 布局, 选项卡 ( 会出现新
界面, 图从略 ), 可以调整表格布
局;
5) 如果表格对应多个表, 需要在,
关系, 选项卡中设置数据表之间的
对应关系
在上述 4个选项卡中, 只有, 表格项,
选项卡是必须设置的,, 关系, 选
项只有在表格对应多个数据表时才
是必须设置的, 而, 样式, 与, 布
局, 一般无需设置, 保持其默认设
置就可以 。
( 6) 修改表单中对象的其他属性, 如名
称 ( Name), 标题 ( Caption) 以及字体,
颜色等等;
? 要修改对象的哪些属性, 既与应用目的有关, 也
与对象所属的基类有关, 开发者只有在熟悉对象
的每种属性含义后, 才能确定该重新设置哪些属
性, 对哪些属性保持其从父类那里获得的继承值 。
本章第 3节, 会专门讨论这个问题 。
( 7) 设计对象代码
( 8) 运行、修改直到满意为止
(9) 存盘,退出
9.1.2用表单向导建立表单
VFP 中有两个表单向导, 各种向导所建立
的表单原型能够完成,
– 表单向导 ( Form Wizard),整个表单针对
一个数据表进行诸如查询, 修改, 插入, 删
除等操作;
– 一对多表单向导( One-To-Many Form
Wizard):整个表单针对两个数据表,而且
这两个数据表间存在一对多的关系
1,用表单向导建
立一个数据表的
操作表单
【 例 9-3】 设计图 9-
2所示的表单
? 在 VFP 菜单栏中,
选择, 文件, 菜
单栏中的, 新建,
选项, 指定文件
类型为, 表单,,
单击, 向导, 按
扭, 然 后 选 择
,Form Wizard‖
图 9-8
? 在图 9-8所示的界
面中,打开数据
表选择对话框,
指定数据表为
,reader‖,并使
用图标为向右的
双尖头按钮选择
全部字段,然后
单击, Next‖。如
图 9-9所示 图 9-9
? 对图 9-9所
示界面一
般不要重
新选择,
默认值就
可以,单
击, Next,
出现图 9-
10 图 9-10
? 如果希望在
表单操作中
数据表记录
按一定顺序
呈现在表单
上,可以在
这里选择一
个或多个排
序字段,然
后单击
,Next,如
图 9-11
图 9-11
? 在图 9-11所示
的界面中,选
择选项按钮为
,Save anf run
form‖然后单击
,finish‖,出现
,另存为, 对
话框
? 指定表单的存
储目录和文件
名,单击, 保
存,,系统将
由向导生成的
表单以指定的
文件名存储到
了指定位置,
并运行这个表
单,
图 9-12
? 至此其实已完成表单的基本设计过程, 但这个
表单和题目要求形式上还不完全相同:没有一
个标签对象说明表单的标题, 表单的背景色不
图, 按钮组也不同, 还需要对这个表单进行修
改:在 VFP的菜单栏中, 选择, 文件, 菜单中
,打开, 选项, 指定文件类型为, 表单,, 并
指定存储目录与文件名, 进入表单设计窗口
? 删除表单上的命令组对象, 右侧加入一个根据
用户子类 Command_vcr派生的命令组
? 重新按表 9-2设置表单中各对象的属性, 并将表
单的 BackColor属性设置为 192,192,192
? 保存
2.用一对多表单向导建立两个数据表的操
作表单
【 例 9-4】 建立一个表单,查询每位读者借
阅图书情况
在数据库, book‖中, 有两个数据表:
,reader‖和, brower‖,两者是一对多的
关系, reader表作为父表, brower表作为
子表 。 所以, 本例可以使用建立一对多
表单向导完成 。
操作步骤如下,
? 在 VFP 菜单栏
中,选择, 文
件, 菜单中的
,新建, 选项,
指定文件类型
为, 表单,,
选择, 表单向
导, 中的
,One-to-
Many Forom
Wizard‖,进
入图 9-13所示
的界面
图 9-13
? 指定, reader‖作为父表, 并把表中的 6个字段
全部移到, Selected Fields‖框中, 单击, Next‖。
? 选择, brower‖作为子表, 并把表中的 4个字段
全部移到, Selected Fields‖框中, 单击, Next‖。
? 建立两个表间的关联关系为, dzbh‖对, dzbh‖。
本例中两个数据表中的关联字段名称相同,系
统以默认值显示该关联关系,但如果两个表中
的关联字段名不相同时,系统不会有默认指定,
要由用户确定。关联关系与关联字段请参考
,数据库的基本操作, 一章的有关部分。单击
,Next‖。
? 选择表单样式, 这和, Form Wizard‖中的
对应部分一样, 一般保持默认值即可,
单击, Next‖。
? 选择排序字段,这和建立, Form Wizard‖
中的对应部分一样,应根据情况选择,
本例中不选择排序字段。单击, Next―。
? 最后一步,选
择选项按钮为
,Save and run
form‖,指定
表单存储目录
与文件名,单
击, finish‖,出
现如图 9-14
图 9-14
9.1.3表单的运行
有三种方法可以运行表单,
? DO FORM [路径 ] <表单名 >
? 在表单设计窗口,选择菜单栏中的, 表
单, 菜单中的, 运行,,或直接单击工
具栏中的红色惊叹号。
? 在项目管理器中,选中, 文档, 选项卡
并指定要运行的表单,单击, 运行, 按

9.2 表单的操作
? 9.2.1 表单的属性
? 表单作为一个对象,当然也和其他对象
一样具有属性、可以识别的事件以及事
件响应程序,这一节先讨论表单中使用
者应重点关注的属性,下一节讨论表单
的事件和事件代码
? AlwaysOnTop——控制表单是否总是处在其他
打开窗口之上, 默认值 为, 假, (.F.)
? AutoCenter ——表单初始化时是否让表单自动
地在 VFP 主窗口中居中, 默认值 为, 假, (.F.)
? BackColor——决定表单窗口的颜色, 默认值 为
255,255,255
? BorderStyle——决定表单是否没有边框, 还是
具有单线边框, 双线边框或系统边框 。 如果
BorderStyle 为 3 — 可调边框, 用户就能重新改
变表单大小, 默认值 为 3
? Caption——决定表单标题栏显示的文本, 默认
值 为 Form1
? Closable——控制用户是否能通过双击, 关闭,
框来关闭表单, 默认值 为, 真, (.T.)
? DataSession ——控制表单或表单集里的表是否
能在可全局访问的工作区中打开, 或仅能在表
单或表单集所属的私有工作区内打开, 默认值
为 1
? MaxButton ——控制表单是否具有最大化按钮,
默认值 为 真 (.T.)
? MinButton——控制表单是否具有最小化按钮,
默认值 为真 (.T.)
? Movable——控制表单是否能移动到屏幕的新
位置, 默认值 为 真 (.T.)
? ScaleMode ——控制对象的尺寸和位置属性的
度量单位是 foxels 还是像素, 由, 选项, 对话
框中的设置决定
? Scrollbars——控制表单所具有的滚动条类型,
默认值 为 0 - 无
? TitleBar ——控制标题栏是否显示在表单的顶
部, 默认值 为 1 - 打开
? ShowWindow ——控制表单是否在屏幕中, 悬
浮在顶层表单中或作为顶层表单出现, 默认值
为 0 - 在屏幕中
? WindowState ——控制表单是否最小化, 最大
化还是正常状态, 默认值 为 0 - 普通
? WindowType——控制表单是否非模式表单
( 默认 ) 还是模式表单 。 如果表单是模式表单,
用户在访问应用程序用户界面中任何其他单元
前必须关闭这个表单, 默认值 为 0 - 无模式
9.2.2表单的事件与方法
表单可以响应 40多个事件和方法,常用的有,
? Init 事件:创建表单时触发该事件, 从而执行为该事件
编写的代码 。 Init代码通常用来完成一些关于表单的初
始化工作 。
? Destory:释放表单时触发该事件, 该方法代码通常用
来进行文件关闭, 释放内存变量等工作 。
? Show 和 Hide 是一对方法,Show 使表单可见,而 Hide
则是隐藏表单。注意,如果使用 Show()格式调用该
方法,则只是显示一次表单,要希望表单显示并停留
在屏幕上,应该使用 Show( 1)格式调用该方法。另
外,Hide方法只是在屏幕上隐藏表单,并没有从内存
中释放表单,隐藏后的表单依然可以通过调用 Show方
法恢复显示
? Release 方法从内存中释放表单 。 注意 Release
方法与 Destory 的区别, Destory 方法是由表单
释放事件而触发的方法, 而 Release 方法则是
主动释放表单, 可以说 Release是 Destory 的触
发器, 由于 Release 方法的实行而导致表单的释
放, 从而引发表单释放事件, 并因此触发
Destory 方法的运行 。
? Refresh 方法刷新表单数据。当表单中各种对象
所对应的数据发生改变时,有时并不自动的反
映在表单界面上,需要使用 Refresh 刷新,才
能显示最新数据。如用一个文本框关联一个数
据表字段,当数据表记录指针移动后,新记录
对应的数据需要刷新后才能更新
9.2.3数据环境
? 数据环境是包括了 Cursor和 Relation两类对象的一个容

? 每一个使用了数据表的表单都包括一个数据环境。数
据环境是一个容器对象,它用来定义与表单相联系的
数据实体(表、视图)的信息及其相互联系
? 数据环境容器一般包含一到多个 Cursor,表单中所含
Cursor类对象的个数与表单关联的数据实体(数据表、
视图)的个数相同,一个 Cursor类对象与一个数据实体
(数据表、视图)对应
? 如果一个表单关联多个数据表,在数据环境容器中就
有一个 Relation,否则没有 Relation对象
1,游标 ( Cursor) 类对象
? 当存储在磁盘上的一个数据表文件被打
开时,系统会在内存中建立一个该表的
临时文件,它是磁盘文件的一个映象,
所有数据表的操作修改命令都是针对这
个映象进行的,当发布数据更新
TableUpdate()命令或关闭数据文件的
命令后,系统再把这个映象文件存入磁
盘,从而完成对磁盘文件的修改。
? Cursor 类对象也称为游标对象,它用来
定义临时表的相关信息
? Cursor 类对象的常用属性,
– Alias—与 Cursor相关联的数据表的别名
– BufferModeOverride—临时表缓冲方式, 有 0~6 七种缓冲方式,
默认值为 1
– CursorSource—临时表的数据源 ( 表, 视图 )
– DataBase—数据源对应的数据库
– Exclusive—数据源以独占还是共享打开, 该属性为真时表示以
独占方式打开数据源, 默认值为,F,
– Filter—过滤器, Filter 是一个条件表达式, 只有满足该条件的
记录才出现在与 Cursor对应的对象中
– NoDataOnload—如果设置为,T., 则表示只打开表结构而不加
载数据, 默认值为,F,
– Order—设置的主控索引标志
– ReadOnly—只读标志, 默认值为,F,
? Cursor 类只支持 Init,Destory,Error 等三个事件
2.关系( Relation)类对象
? Relation 类对象的属性,
– ChildAlias—子表的别名
– ChildOrder—子表主控索引值
– OneToMany—是否属于一对多关系, 默认值
为,T,
– ParentAlias—父表别名
– RelationExpr—关系表达式
? Relation 对象也只有 Init,Destory,Error
等三个事件方法
3、数据环境( DataEnvirinment)容器
? 数据环境容器的属性,
– AutoCloseTable—是否在释放表单时自动关
闭表
– AutoOpenTable—是否在打开表单时自动打
开与表单关联的表
– InItaSelectdAlias—当运行表单时选定的
表或视图 。 设计时刻为,” ( 空 ) 。 如
果没有指定, 在运行时首先加到, 数据环境,
中的临时表最先被选定 。
? DataEnvirinment的事件,
除 Init, Destory,Error三个事件外,
DataEnvirinment还支持两个事件和两个方法,
– BeforeOpenTable() 事件 —打开表时发生, 打
开表前执行该事件代码 。
– AfterCloseTable() 事件 —关闭表时发生, 关
闭表后执行该事件代码 。
– CloseTable 方法 —用于关闭数据环境中所定
义的所有数据源 ( 表, 视图 )
– OpenTable—用于打开闭数据环境中所定义
的所有数据源(表、视图)
4、数据环境设计器
可以使用完全的编程方式建立数据环境,但大多数情
况下都是用数据环境设计器来建立表单的数据环境。
【 例 9-5】 建立一个如 下 图所示的表单。表单中有三个
对象,标签对象显示这个表单的标题:, 读者借阅图书情
况查询,,左侧的列表框对象中从, reader‖表中选择读
者的名字,右侧的表格对象显示被选中的读者的借阅图书
情况,当重新选择一个读者时,表格中的数据会自动变化
? 操作步骤如下,
– 用新建文件的方式进入表单, 不要使用表单向导
– 为空白表单加入第一个对象:数据环境, 操作步骤如下,
? 在表单空白处, 单击鼠标辅按扭, 选择, 数据环境,, 出现一个
数据环境设计框
? 在数据环境设计框中, 单击鼠标辅按扭, 选择, 添加, (见下图 ),
首先选择父表, reader‖,单击, 添加,, 然后选择子表, brower‖,
单击, 添加,, 单击, 关闭,, 退出数据环境设置后, 为表单加
入一个文本框对象, 一个列表框对象, 一个表格对象, 用鼠标对
三个对象进行大致布局 。
– 使用生成器设置列表框和表格对象的属性, 前
面已经说明过表格生成器的用法, 下面只简要
说明一下列表框生成器的用法,
把鼠标移到列表框对象上, 单击辅按扭, 选
择, 生成器,, 在生成器中选择对象所关联的字段,
然后单击, 确定,
– 直接修改标签对象的 Caption属性:, 读者借阅
图书情况查询,, FontSize,22,ForeColor,0,
0,255。 保持表单
9.2.4 表单对象的操作
? 表单所包含对象的插入、删除
? 表单所包含对象的布局
VFP 提供了一个, 表单布局工具框,,
选定表单中的某个对象后,使用布局工具
框中的相应按钮让其, 水平居中,,, 垂直
居中,,等操作,同时选择一个以上的对
象时,还可以使用表单布局工具栏使所有被
选中的对象执行, 左对齐,,, 右对齐,,
,顶边对齐,,, 底边对齐,,, 相同高
度,,, 相同宽度,,, 相同大小, 等操作
9.3常用表单控件
? 表单常用控件就是 VFP为开发者提供的
基类,它是设计各种子类的基础,也是
在表单中设计各种对象的基础
? 我们在学习这些控件时,要注意理解,
– 控件的功能
– 基本属性以及可选择的属性值
– 主要事件方法
? 命令按钮控件
命令按钮是最简单也是最常见的一种控件,
鼠标在其上面作用可触发一段程序的运行
? 命令按钮组控件
多个命令按钮组成一组,对组中的按钮即可单
独操作,也可作为一个组来统一操作
? 文本框控件
文本框是用来在应用系统与用户之间进行数据
交互的一种常用工具,它可以和一个数据或
数据视图中的非备注字段关联
? 编辑框控件
编辑框也是用来输入用户的数据的。在编辑框
中允许用户编辑长字段或备注字段文本
? 复选框控件
组合框兼有列表框和文本框的功能。有两种形
式的组合框,即下拉组合框和下拉列表框,
通过更改控件的 Style组合框控件
? 单选按钮控件
单选按钮组是包含单选按钮的容器。通常,单
选按钮允组用来由用户指定对话框中几个操
作选项中的一个
? 微调控件
使用微调控件可以让用户通过, 微调, 尖头来选择所
需要的数据,直接在微调框中直接键入所需要的数

? 标签控件
标签通常被用做提示或标题。标签和文本框的不同之
处在于标签没有数据源,不能编辑,运行时不能被
选中
? 列表框控件
列表框和下拉列表框(即 Style属性为 2的组合框控
件 — ) 为用户提供了包含一些选项和信息的可滚
动列表。列表框中,任何时候都能看到多个项;而
在下拉列表中,只能看到一个项,用户可单击向下
按钮来显示可滚动的下拉列表框
? 表格控件
表格是一种容器对象, 它包含了若干个列, 而列又包含标头和文本, 其关系
是,
表格,列
列, 标头, 文本
? 计时器控件
计时器控件与用户的操作独立。它只对时间作出反应,以一定的间隔重
复地执行某种操作
? 页框控件
页框是, 页面, 的一种容器,而, 页面, 也是一种容器,可以放置任何
控件、容器和自定义对象,一个页面在运行时对应一个屏幕窗口
表单的一个窗口幅面有限,如果在一个应用中要涉及到的对象很多,在
一个窗口不好布局时,可以把整个表单中的对象按联系的紧密程度
进一步划分为小的模块,把一个模块中的对象在一个页面中进行布
局,这样,整个窗口就显得简要、清晰
9.4 表单的应用
? 9.4.1系统登录表单
– 作用,每个应用系统都有自己的用户群,在
进入一个应用系统前,常有一个登录过程,
目的就是验明使用者的身份,防止未授权用
户进入系统,从而保证系统安全
– 与登录过程相关的数据表
登录过程实际上是对用户所输入的信息进行验证
的过程,验证方法一般是在一个用户信息数据表
中检索用户输入的数据,若检索到,则容许用户
登录,否则,拒绝用户登录。为减少数据的描述
过程,这里借用前面多次应用的, reader‖表进
行登录检查,以读者编号( dzbh)表进行登录检
查,以读者编号( dzbh)作为密码,即假设系统
只容许在, reader‖表中注册过的读者才能登录,
登录时要输入自己的姓名与编号
– 表单 中共有三个标签对象,两个文本框对象
和一个命令按钮,应分别设置其属性
? 数据环境设计
为表单中加入一个数据环境,并在该环境中加入, reader‖
数据表,数据环境其他属性保持默认属性
命令按钮代码
SELECT (ThisForm.DataEnvironment.Cursor1.Alias)
LOCATE FOR xm=ThisForm.Text1.Value AND
dzbh=ThisForm.Text2.Value
IF FOUND() THEN
=MessageBox('祝贺你登录成功 ! ')
&&,............,
ELSE
=MessageBox('读者姓名编号不正确, 你可能还没有注册 ')
&&,............,
ENDIF
RETURN
9.4.2 数据编辑表单
编辑(修改、插入、
删除)数据表中
的数据是表单的
一个重要应用方
面。图是一个数
据表的编辑表单,
在该表单中,可
以加入和修改教
师数据,也可以
对应每个教师修
改其授课的情况
9.4.3 数据查询表单
数据查询表
单与数据修改表
单的差别不大,
实际上,很多时
候把两种表单合
并起来,在同一
个表单中即可实
现数据的查询,
也可进行数据的
插入、删除、修
改等编辑工作
?
? 数据环境设置
在数据环境中加入一个数据表, 学生,,并把数据环
境中 Carsor1对象的 Filter属性值设置为假(,F.),以
使刚进入表单但还未查询前表格中没有数据
? 对象属性设置
共包含一个单选按钮组对象、一个标签对象和一个命
令按钮对象,单选按钮组对象又包含三个单选按钮
– Option1的 Caption属性,姓名
– Option2的 Caption属性,读者编号
– Option3 的 Caption属性,工作单位
– Label1 的 Caption属性,选择查询条件
– Command1的 Caption属性,查询
? 命令按钮代码设计
DO CASE
CASE ThisForm.OptionGroup1.Value=1 && 选择了第
一个按钮
Bool='xm='+"'"+TRIM(ThisForm.Text1.Value)+"'" &&
生成一个条件字符串
CASE ThisForm.OptionGroup1.Value=2
Bool='dzbh='+"'"+ TRIM(ThisForm.Text1.Value)+"'"
CASE ThisForm.OptionGroup1.Value=3
Bool='gzdw='+"'"+TRIM(ThisForm.Text1.Value)+"'"
ENDCASE
ThisForm.DataEnvironment.Cursor1.Filter=Bool && 条件
表达式送 Filter属性
ThisForm.Refresh
RETURN