第7章 表单控件设计
7.1 输出类控件 标签(Label) 图象(Image)、线条(Line)与形状(Shape) 属性选介 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不等 正方形 矩形 1-99 小圆角正方形→大圆角正方形→圆 小圆角矩形→ 大圆角矩形→ 椭圆
[例7-1] 设计如图7.1所示的应用程序封面。 (1) 创建表单FM.SCX。 (2) 在表单上创建标签和形状控件各1个。 (3) 设置属性:详见表7.4 (4) 将封面的文字置前于椭圆:选定Label1,然后在布局工具栏中选定“置前”按钮。若已置前,则该步骤可省。 (5) Form1的RightClick事件代码编写如下: THISFORM.Release && 右击表单执行Release方法程序,从内存释放该表单
表7.4 “封面”属性设置 对 象 属 性 属 性 值 说 明 Form1 Desktop .T. 表单设置在桌面上 WindowState 表7.4 “封面”属性设置 对 象 属 性 属 性 值 说 明 Form1 Desktop .T. 表单设置在桌面上 WindowState 2 表单最大化 BorderStyle 取消表单边框 TitleBar 取消表单标题栏 Picture c:\vfp\gallery\graphics\tools.ico 表单贴若干tools.ico拼成的壁纸 Label1 Caption 汽车修理管理系统 封面文字 AutoSize Label1区域自动适应标题大小 FontName 隶书 字体 FontSize 36 文字大小 FontBold 粗体 ForeColor 0,0,255 标题颜色为蓝色 BackStyle 背景透明,不显示Label1区域 Shape1 Curvature 99 为画椭圆,使圆角最大 BorderColor 255,255,0 边框颜色为黄色 BackColor 0,255,255 背景颜色为青色
7.2 输入类控件 文本框(Text) 文本框的值Value属性 焦点 控件设置焦点方法程序格式:Control.SetFocus 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 && 将列表框选项值赋给文本框 (a1) 图7.5 列表框选项
组合框(Combo) 控件值源的类型 下拉组合框Style属性值 0 下拉列表框 Style属性值1 表7.5 列表框、组合框控件的值源类型 表7.5 列表框、组合框控件的值源类型 设置值 值源类型 说 明 无 缺省值,运行时用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 选项替代
表7.7 “用BMDM表修改SB表的部门”属性设置 对 象 属 性 属 性 值 说 明 Form1 Caption 用BMDM表的代码来修改SB表的部门 在表单标题栏显示文本 Label1 请指定要修改的记录: 设置第1个标签的显示文本 AutoSize .T. 区域大小自动适应标题 Label2 请选供代入的部门号: 设置第2个标签的显示文本 List1 RowSourceType 6 列表框值源类型:字段 RowSource sb.编号,名称,部门 数据环境中添加表后才能设置字段 ColumnCount 3 列表显示3列 BoundColumn 1 第1列作为value属性值 Combo1 Style 2 组合框类型设置为下拉列表框 组合框值源类型:别名 BMDM 数据环境中添加表后才能设置表名 列表显示2个字段:代码与名称 ControlSource 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 (3) Combo1的Interactive Change事件代码编写如下: THISFORM.Text1.Value=THIS.Value
微调控件(Spinner) (2) UpClick Event:按微调控件的向上按钮事件。 属性选介 (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次密码。 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 && 使文本框获得焦点,就是使光标在其中闪烁 MESSAGEBOX('密码错,禁止进入系统!') THISFORM.Release ENDIF
(5) Command2的Click事件代码编写如下: THISFORM.Release 图7.8 输入密码表单窗口 表7.8 “密码输入”属性设置 对 象 属 性 属 性 值 说 明 Form1 Caption =DTOC(DATE()) 表单标题栏显示当前日期 Label1 密码: 设置标签的显示文本 Text1 PasswordChar * 设置占位符,输入任何字符都显示它 Value (无) 清空文本框,否则初始时会显示占位符 Command1 确定 设置命令按钮的标题文本 Command2 取消
命令按钮组(Commandgroup) 命令按钮组生成器 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 CASE THIS.Value =3 && 单击Command3命令按钮(退出)返回.T. THISFORM.Release && 表单从内存释放 ENDCASE 图7.9 命令按钮组生成器的按钮选项卡 图7.11 “修改SB表数据”表单窗口
复选框(Check) 复选框的值 选项按钮组(Optiongroup) 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 选表: Check1 编辑 Command1 确定 Command2 退出 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):由一或若干列组成。 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.17 两级一多关系数据环境 图7.16 按部门浏览设备表单窗口
表7.14 “按部门浏览设备”属性设置 对 象 名 属 性 属 性 值 说 明 Form1 Caption 按部门浏览设备 Combo1 表7.14 “按部门浏览设备”属性设置 对 象 名 属 性 属 性 值 说 明 Form1 Caption 按部门浏览设备 Combo1 Style 2 组合框类型:下拉列表框 RowSourceType 值源类型:别名 RowSource BMDM 设置值源表 ColumnCount 列表显示代码,名称2个字段 BoundColumn 设定第2列为value值 GrdSb,GrdDx,GrdZz ReadOnly .T. 3个表格设置只读 GrdSb.Column1.Header1 设备编号 GrdDx.Column1.Header1 大修设备 GrdZz.Column1.Header1 增值设备 Label1 请选择部门: AutoSize FontSize 14 Label2 设 备 情 况 用于表单运行之初显示标题 11 Shape1 SpecialEffect 以3维形式显示形状框
页框(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.20 用滑杆控件浏览 图7.19 插入对象对话框
(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 图象浏览器表单窗口 表7.15 “图象浏览器”属性设置 对 象 名 属 性 属 性 值 说 明 Form1 Caption 图象浏览器 Oleboundcontrol1 ControlSource sb.商标 Ole绑定型控件与通用型字段绑定 Strech 1 图象以纵横等比尺寸填充OLE控件 Command1 替换 Shape1 SpecialEffect 以3维形式显示形状框
(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图象对象 && 为使代入的图象当场显示,刷新OLE绑定型控件的显示