第 7章 表单控件设计
7.1 输出类控件标签 (Label)
属性选介
(1) 使标签区域自动调整为与标题文本大小一致:可将 AutoSize属性设置为,T.。
(2) 使标签的标题竖排:先将 WordWrap属性设置为,T.,然后在水平方向压缩标签区域迫使文字换行。
(3) 使标签与表单背景颜色一致:将 BackStyle属性设置为 0(透明 )
(4) 使标签带有边框:将 BorderStyle属性设置为 1(单选框 )
图象 (Image)、线条 (Line)与形状 (Shape)
创建图象的步骤如下,在表单上创建一个图象控件?在属性窗口选定 Picture属性,并通过文本框右侧的对话按钮选定一个图象,该图象即显示在图象控件处。
线条控件用于在表单上画各种类型的线条,包括斜线、水平线和垂直线。
形状控件用于在表单上画出各种类型的形状,包括矩形、圆角矩形、正方形、圆角正方形,椭圆或圆。
表 7.3 形状控件的形状设置
Curvature Width与 Height相等 Width与 Height不等
0 正方形 矩形
1-99 小圆角正方形 → 大圆角正方形 → 圆 小圆角矩形 → 大圆角矩形 → 椭圆
[例 7-1] 设计如图 7.1所示的应用程序封面。
(1) 创建表单 FM.SCX。
(2) 在表单上创建标签和形状控件各 1个。
(3) 设置属性:详见表 7.4
(4) 将封面的文字置前于椭圆:选定 Label1,然后在布局工具栏中选定“置前”按钮。若已置前,则该步骤可省。
(5) Form1的 RightClick事件代码编写如下,
THISFORM.Release && 右击表单执行 Release方法程序,
从内存释放该表单对 象 属 性 属 性 值 说 明
Form1 Desktop,T,表单设置在桌面上
WindowState 2 表单最大化
BorderStyle 0 取消表单边框
TitleBar 0 取消表单标题栏
Picture c:\vfp\gallery\graphics\tools.ico 表单贴若干 tools.ico拼成的壁纸
Label1 Caption 汽车修理管理系统 封面文字
AutoSize,T,Label1区域自动适应标题大小
FontName 隶书 字体
FontSize 36 文字大小
FontBold,T,粗体
ForeColor 0,0,255 标题颜色为蓝色
BackStyle 0 背景透明,不显示 Label1区域
Shape1 Curvature 99 为画椭圆,使圆角最大
BorderColor 255,255,0 边框颜色为黄色
BackColor 0,255,255 背景颜色为青色表 7.4,封面,属性设置
7.2 输入类控件文本框 (Text)
文本框的值 Value属性焦点控件设置焦点方法程序格式:
Control.SetFocus
获得焦点事件 (GotFocus Event)
失去焦点事件 (LostFocus Event)
控件的数据绑定
ControlSource属性文本框生成器编辑框 (Edit)
列表框 (List)
列表框生成器
[例 7-3] 在列表框中填充 SB表的编号和名称两个字段,要求选定列表框的任一项,就能使文本框中显示编号字段值。
(1) 在表单中创建 1个列表框控件和 1个文本框控件。
(2) 打开列表框生成器 —— 在列表项选项卡的“用此填充列表”组合框中选定“表或视图中的字段”选项 —— 如图 7.4(a1)所示,通过对话按钮选出 SB表,然后将编号和名称字段从可用字段列表添入选定字段列表中 — 按确定按钮。
(3) List1的 Interactive Change事件代码编写如下,
THISFORM.Text1.Value=THIS.Value
&& 将列表框选项值赋给文本框图 7.5 列表框选项
(a1)
表 7.5 列表框、组合框控件的值源类型组合框 (Combo)
下拉组合框 Style属性值 0
下拉列表框 Style属性值 1
控件值源的类型设置值 值源类型 说 明
0 无 缺省值,运行时用 AddItem或 AddListItem方法程序将数据分别填入列中
1 值 RowSource设置逗号分隔的数据项来分别填充列
2 别名 RowSource设置表名,表由数据环境提供,用 ColumnCount确定字段数
3 SQL语句 RowSource设置 SQL SELECT命令选出记录,并可创建一个临时表或表
4 查询 (.QPR) RowSource设置一个,QPR文件名
5 数组 RowSource设置数组名
6 字段 RowSource设置逗号分隔的字段列表,首字段有表名前缀,表来自数据环境
7 文件 在 RowSource设置路径,可用通配符或掩码,结果以目录与文件名填充列
8 结构 在 RowSource设置表名,结果以字段名来填充列
9 弹出式菜单 为与以前版本兼容而设
[例 7-4] 试用 BMDM表的代码来修改 SB表的部门字段。
要求 SB表在列表框显示,BMDM表在组合框显示;并且当列表框确定一个记录后,便可用组合框的选项来替代 SB表的部门字段值。
(1) 在表单上创建 2个标签,1个列表框和 1个组合框。
(2) 在数据环境中添加 SB表和 BMDM。
注意,若存在关联联线则将它取消。
(3) 属性设置:见表 7.7。
(4) Combo1的 InteractiveChange 事件代码编写如下:
THISFORM.LIST1.Refresh
&& 在组合框列表中选项并替代 SB.部门后更新列表框的显示
(5) Form1的 Init事件代码编写如下:
THISFORM.Combo1.Enabled=.F,
&& 使初始时不能操作组合框,只可在列表框先确定记录
(6) List1的 InteractiveChange 事件代码编写如下:
THISFORM.Combo1.Enabled=.T,
&& 列表框操作后即允许组合框操作
(7) List1的 Init事件代码编写如下:
SET ORDER TO TAG 编号
&& 使列表按设备编号次序显示 (假定 SB表中该索引标识已存在 )
图 7.6 选项替代对 象 属 性 属 性 值 说 明
Form1 Caption 用 BMDM表的代码来修改
SB表的部门在表单标题栏显示文本
Label1 Caption 请指定要修改的记录,设置第 1个标签的显示文本
AutoSize,T,区域大小自动适应标题
Label2 Caption 请选供代入的部门号,设置第 2个标签的显示文本
AutoSize,T.
List1 RowSourceType 6 列表框值源类型:字段
RowSource sb.编号,名称,部门 数据环境中添加表后才能设置字段
ColumnCount 3 列表显示 3列
BoundColumn 1 第 1列作为 value属性值
Combo1 Style 2 组合框类型设置为下拉列表框
RowSourceType 2 组合框值源类型:别名
RowSource BMDM 数据环境中添加表后才能设置表名
ColumnCount 2 列表显示 2个字段:代码与名称
BoundColumn 1 第 1列作为 value属性值
ControlSource SB.部门 指定从列表选定的项存入的位置表 7.7,用 BMDM表修改 SB表的部门,属性设置
[例 7-6] 在表单上创建 1个组合框和 1个文本框,要求如下:
(1) 组合框的列表包含 SB表的编号字段值。
(2) 能在组合框中为其列表键入新选项。
(3) 若选取组合框列表中的项 (也可以是刚添入的新选项 ),便能将它送入文本框。
假定组合框和文本框已在表单上创建 (图略 ),下面列出主要的属性和事件代码。
(1) Combo1属性设置
Style,0 (默认值,表示组合框类型为下拉组合框 )
RowSourceType,6 (表示控件值源类型为字段 )
RowSource,SB.编号 (在数据环境中添加 SB表后,就能在属性窗口选取字段 )
(2) Combo1的 KeyPress事件代码编写如下:
LPARAMETERS nKeyCode,nShiftAltCtrl
IF nKeyCode = 13 && 按回车键则条件表达式返回,T.
IF This.ListIndex=0 && 组合框列表中无此键入值返回,T.,才允许添加数据
THIS.RowSourceType=0 && 控件值源类型设置为可用 AddItem方法程序添加数据
THIS.AddItem(THIS.DisplayValue) && 键入值添入列表末尾
THIS.Value=THIS.DisplayValue && 使键入值立即成为列表中的选项
INSERT INTO \vfpex\sb(编号 ) VALUES(THIS.DisplayValue)
&& INSERT-SQL命令在 SB表末尾添加一个记录,并将键入值存入该记录的编号字段
THIS.RowSourceType=6 && 恢复控件值源类型为 "字段 "
ENDIF
ENDIF
(3) Combo1的 Interactive Change事件代码编写如下,
THISFORM.Text1.Value=THIS.Value
微调控件 (Spinner)
属性选介
(1) Value:表示微调控件的当前值。
(2) KeyBoardHighValue:设定键盘输入数值高限。
(3) KeyBoardLowValue:设定键盘输入数值低限。
(4) SpinnerHighValue:设定按钮微调数值高限。
(5) SpinnerLowValue:设定按钮微调数值低限。
(6) Increment:设定按一次箭头按钮的增减数,默认为 1.00。若设置为 1.50 则增减数为 1.5。
(7) InputMask:设置输入掩码。微调控件默认带两位小数,若只要整数可用输入掩码来限定,例如 999999表示 6位整数。若微调控件绑定到表的字段,则输入掩码位数不得小于字段宽度,否则将显示一串 *号。
事件选介
(1) DownClick Event:按微调控件的向下按钮事件。
(2) UpClick Event:按微调控件的向上按钮事件。
7.3 控制类控件命令按钮 (Command)
[例 7-7] 设计一个如图 7.8所示的密码输入窗口,要求最多允许输入 3次密码。
(1) 创建一个表单,然后在其中创建标签和文本框各 1个,命令按钮 2个。
(2) 属性设置:见表 7.8。
(3) Form1的 Load事件代码编写如下:
public i && i用于计算输入次数
i=0
(4) Command1的 Click事件代码编写如下:
i=i+1
IF THISFORM.Text1.Value='123456' && 文本框输入值与 123456(预置的密码 )
比较
THISFORM.Release && 本表单从内存释放
ELSE
IF i<3 && 允许输入 3次
MESSAGEBOX('密码错,请重新输入 !')
THISFORM.Text1.Value='' && 为重新输入清空文本框
THISFORM.Text1.Setfocus && 使文本框获得焦点,就是使光标在其中闪烁
ELSE
MESSAGEBOX('密码错,禁止进入系统 !')
THISFORM.Release
ENDIF
ENDIF
图 7.8 输入密码表单窗口对 象 属 性 属 性 值 说 明
Form1 Caption =DTOC(DATE()) 表单标题栏显示当前日期
Label1 Caption 密码,设置标签的显示文本
Text1 PasswordChar * 设置占位符,输入任何字符都显示它
Value (无 ) 清空文本框,否则初始时会显示占位符
Command1 Caption 确定 设置命令按钮的标题文本
Command2 Caption 取消表 7.8,密码输入,属性设置
(5) Command2的 Click事件代码编写如下:
THISFORM.Release
命令按钮组 (Commandgroup)
命令按钮组生成器
Click事件的判别例如图 7.11中,Commandgroup1的 Click事件代码编写如下:
DO CASE
CASE THIS.Value =1 && 单击 Command1命令按钮 (下页 )返回,T.
IF recno()<reccount() && 防止下移出界
SKIP
ENDIF
THISFORM.Refresh
CASE THIS.Value =2 && 单击 Command2命令按钮 (上页 )返回,T.
IF RECNO()>1 && 防止上移出界
SKIP -1
ENDIF
THISFORM.Refresh
CASE THIS.Value =3 && 单击 Command3命令按钮 (退出 )返回,T,
THISFORM.Release && 表单从内存释放
ENDCASE
图 7.9 命令按钮组生成器的按钮选项卡图 7.11,修改 SB表数据”表单窗口复选框 (Check)
复选框的值
Value属性,0或,F.表示清除; 1或,T.表示选定; 2表示灰色状态。其中数字为默认值。
选项按钮组 (Optiongroup)
选项按钮的 Value属性,1表示选定,0表示未选定。
选项按钮组的 Value属性:表明被选定按钮的序号,默认为 1。例如第 2个按钮被选定时 Value值为
2。
选项按钮组生成器
[例 7-11] 设计一个能编辑或浏览关于设备的 4个数据库表的对话框,界面要求如图 7.12所示。
(1) 在表单上创建 1个复选框和 2个命令按钮。
(2) 数据环境设置:在数据环境中添加 SB表,BMDM表,DX表和 ZZ表。
图 7.12 选表编辑或浏览对象名 属 性 属 性 值
Form1 Caption 数据库表维护
Label1 Caption 选表:
Check1 Caption 编辑
Command1 Caption 确定
Command2 Caption 退出
Optiongroup1 Value 1
表 7.12,选表编辑或浏览,部分属性设置
(3) 创建选项按钮组 Optiongroup1:先在表单上创建一个选项按钮组,然后再利用选项按钮组生成器进行设置。
① 打开选项组生成器对话框:用表单控件工具栏的选项按钮组按钮在表单中创建一个选项按钮组,
右击选项按钮组并选定快捷菜单的生成器命令。
② 在按钮选项卡 (参阅图 7.9)中进行设置:在微调控件中将按钮的数目置为 4?将表格标题列中 4
项依次改为设备表、部门表、大修表和增值表。
③ 在布局选项卡中进行设置:将微调控件按钮间隔置为 10?按确定按钮关闭选项组生成器对话框
将选项按钮组移到表单左部适当位置。
(4) 对其它控件的属性进行设置:见表 7.12。
(5) Optiongroup1的 Click事件代码编写如下:
DO CASE
CASE THIS.Value =1 && 选定 Option1选项按钮 (设备表 )时返回,T.
SELECT SB && 选择 SB表所在工作区
CASE THIS.Value =2 && 选定 Option2选项按钮 (部门表 )时返回,T.
SELECT BMDM && 选择 BMDM表所在工作区
CASE THIS.Value =3 && 选定 Option3选项按钮 (大修表 )时返回,T.
SELECT DX && 选择 DX表所在工作区
CASE THIS.Value =4 && 选定 Option4选项按钮 (增值表 )时返回,T.
SELECT ZZ && 选择 ZZ表所在工作区
ENDCASE
(6) Command1的 Click事件代码编写如下:
* 确定
IF THISFORM.Check1.Value=1 && Check1被选定时返回,T.
BROWSE && 可编辑数据
ELSE && 若 Check1未选定
BROWS NOMODIFY NOAPPEND NODELETE && 仅可浏览,不可编辑
ENDIF
(7) Command2的 Click事件代码编写如下:
* 退出
THISFORM.Release && 表单释放
7.4 容器类控件表格 (Grid)
表格的组成
(1) 表格 (Grid):由一或若干列组成。
(2) 列 (Column):一列可显示表的一个字段,列由列标题和列控件组成。
(3) 列标题 (Header1):默认显示字段名,允许修改。
(4) 列控件 (例如 Text1):一列必须设置一个列控件,列控件默认为文本框。
创建表格控件在数据环境中将表窗口的标题栏拖放到表单窗口利用表格生成器创建表格编辑图 7.14 拖放法产生的表格控件
[例 7-14] 设计一个如图 7.16所示的表单,要求能按部门浏览所有设备数据。
(1) 创建表单,并在数据环境中建立如图 7.17 所示 4个表的两级一多关系。
(2) 在表单上创建 1个下拉列表框,2个标签,3个表格。表格控件可从数据环境创建,即将数据环境中 SB窗口的标题栏拖到表单释放,从而产生 GrdSb表格。然后可用同样方法创建表格
GrdDx和 GrdZz,如图 7.16所示。表格创建后按图调整好表格位置、大小与列宽。
(3) 如图 7.16所示创建矩形框形状控件,然后选定格式菜单的置后命令。
(4) 属性设置:见表 7.14。
(5) Combo1的 Init事件,
SELECT bmdm
GO BOTTOM
SKIP && 故意将记录指针移到出界,以使表格在表单运行之初显示空白
(6) Combo1的 Click事件,
THISFORM.Label2.Caption=THISFORM.Combo1.Value+"设备情况 " && 标题例如“一车间设备情况”
图 7.16 按部门浏览设备表单窗口图 7.17 两级一多关系数据环境对 象 名 属 性 属 性 值 说 明
Form1 Caption 按部门浏览设备
Combo1 Style 2 组合框类型,下拉列表框
RowSourceType 2 值源类型,别名
RowSource BMDM 设置值源表
ColumnCount 2 列表显示代码,名称 2个字段
BoundColumn 2 设定第 2列为 value值
GrdSb,GrdDx,GrdZz ReadOnly,T,3个表格设置只读
GrdSb.Column1.Header1 Caption 设备编号
GrdDx.Column1.Header1 Caption 大修设备
GrdZz.Column1.Header1 Caption 增值设备
Label1 Caption 请选择部门:
AutoSize,T.
FontSize 14
Label2 Caption 设 备 情 况 用于表单运行之初显示标题
FontSize 11
Shape1 SpecialEffect 0 以 3维形式显示形状框表 7.14,按部门浏览设备,属性设置页框 (Pageframe)
[例 7-15] 在表单上创建一个如图 7.18所示含有两个页面的页框,分别用来维护 SB表和 BMDM表。
(1) 在表单上创建一个页框。
(2) 在数据环境中添加 SB表和 BMDM表。
(3) 页面标题设置:在页框中选定 Page1页面,
将页面的 Caption 值改为设备。以同样方法将
Page2页面标题改为部门。
(4) 在页面中创建表格:在页框中选定设备页面,做一个从数据环境中 SB窗口标题栏到设备页面的拖放动作,页面中就会显示关于 SB表的表格。
以同样方法在部门页面中创建关于 BMDM 表的表格。
图 7.18 含有两个页面的页框连接类
ActiveX控件 (Olecontrol)
[例 7-16] 用滑杆控件浏览设备表的设备名称,要求滑杆指向什么数值,就显示记录号为该数值的设备名。
(1) 在表单上创建 1个文本框控件。
(2) 在表单上创建 1个滑杆控件:从表单控件工具栏中选定
ActiveX(Olecontrol)控件按钮 —— 单击表单下部某处?在插入对象对话框中选定“插入控件”选项按钮 —— 在控件类型列表中选定 Microsoft Slider
Control,version 6.0选项 —— 选定确定按钮返回表单窗口 (见图 7.20)。
图 7.19 插入对象对话框图 7.20 用滑杆控件浏览
(3) 在数据环境中添加 SB表。
(4) 将 Form1表单的 Caption属性设置为浏览设备名称。
(5) Olecontrol1的 Init事件代码编写如下:
* 滑杆指针刻度范围按表的记录数设置
THIS.Min = 1 && 刻度值最小为 1
THIS.Max = RECCOUNT() && 刻度值最大与记录个数相同
(6) Olecontrol1的 MouseMove事件代码编写如下:
LPARAMETERS button,shift,x,y
* 移动滑杆指针来显示 SB表的名称字段值
* Olecontrol1:滑杆控件的 Name
* THISFORM.Olecontrol1.Value:滑杆指针所在刻度的值
GO THISFORM.Olecontrol1.Value && 记录指针指向滑杆指针所在刻度
THISFORM.Text1.Value = 名称 && 文本框显示名称字段值
ActiveX绑定控件
(Oleboundcontrol)
[例 7-17] 自制一个如图 7.23所示的图象编辑器,
要求能对 SB表通用型字段中的图象进行浏览、修改、
增入与替换。
(1) 在表单上创建 OLE 绑定型控件、滑杆控件、
命令按钮控件和形状控件各 1个。
(2) 将形状控件置于 OLE绑定型控件之后:选定形状控件,然后选定格式菜单的置后命令。
(3) 属性设置:见表 7.15。 图 7.23 图象浏览器表单窗口对 象 名 属 性 属 性 值 说 明
Form1 Caption 图象浏览器
Oleboundcontrol1 ControlSource sb.商标 Ole绑定型控件与通用型字段绑定
Strech 1 图象以纵横等比尺寸填充 OLE控件
Command1 Caption 替换
Shape1 SpecialEffect 0 以 3维形式显示形状框表 7.15,图象浏览器,属性设置
(4) Olecontrol1的 Init事件代码编写如下:
* 滑杆指针刻度范围按 SB表记录数设置
THIS.Min = 1
THIS.Max = RECCOUNT()
(5) Olecontrol1的 MouseUp事件代码编写如下:
LPARAMETERS button,shift,x,y
GO THISFORM.Olecontrol1.Value && 记录指针指向滑杆指针所在刻度
THISFORM.Oleboundcontrol1.Refresh
&& 为使图象当场显示,刷新 OLE绑定型控件的显示
(6) Command1的 Click事件代码编写如下:
* 既能向当前记录通用型字段增入图象,又能替换图象
tx=GETPICT() && 显示打开图片对话框,并返回用户选定的图象文件名
APPEND GENERAL sb.商标 FROM &tx
&& 从选定文件向当前记录的通用型字段代入 Ole图象对象
THISFORM.Oleboundcontrol1.Refresh
&& 为使代入的图象当场显示,刷新 OLE绑定型控件的显示