实验八常用控件类对象综合应用.docx
- 文档编号:3494833
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:19
- 大小:763.87KB
实验八常用控件类对象综合应用.docx
《实验八常用控件类对象综合应用.docx》由会员分享,可在线阅读,更多相关《实验八常用控件类对象综合应用.docx(19页珍藏版)》请在冰豆网上搜索。
实验八常用控件类对象综合应用
实验八 常用控件类对象综合应用
一、实验学时
2学时
二、实验目的
1.掌握标签、文本框(valid事件)、命令按钮、组合框(或列表框)、计时器使用方法。
2.掌握表单设计器使用、表单布局与修饰。
三、实验要求
1.熟悉上述控件常用的属性:
caption、value、name、alignment、fontsize、forecolor、backcolor、passwordchar、selstart、seltext、visible、autosize、top、left、height、width、rowsource、rowsourcetype等。
2.熟悉上述控件常用的事件:
click、valid、timer、interactivechange等。
3.熟悉上述控件常用的方法:
release、refresh、setfocus、setall、additem、clear、removeitem等。
四、上机实例
【例8.1】用文本框设计一个口令验证程序。
【设计要求】
1.设计一个口令验证界面。
在文本框输入口令,当用户口令正确时,显示“口令正确,欢迎使用!
”对话框;当口令错误时,显示“口令错误,请重输入!
”,允许输入3次,如果3次输入口令错误,显示“无权登陆,请退出!
”,同时文本框无效。
表单运行界面如图8.1、8.2、8.3、8.4所示。
图8.1口令验证界面图8.2口令正确界面
图8.3口令错误界面图8.4口令3次错误界面
【实验步骤】
1.界面设计
在“表单控件”工具栏上单击“命令按钮”控件、“标签”控件、“文本框”控件,将command1、label1、text1拖至表单,表单初始界面如图8.5所示。
图8.5表单设计界面
2.题目分析
(1)为统计口令输入次数,必须增加一个变量c,每输入一次错误口令,c自动加1。
保证c在表单中所有控件中运用,在form的init事件中将c的属性设为public。
(2)在文本框的valid事件中验证口令,采用分支结构(if/else/then),若口令正确显示“口令正确”对话框,释放焦点,返回值为.t.;若口令错误显示“口令错误”提示,不释放焦点,返回值为.f.。
同时c加1。
当c的值等于3时,显示“无权登陆”,同时将文本框设为无效,不允许输入。
3.属性设置。
表8.1对象属性设置
对象名
属性名
属性值
作用
form1
caption
口令验证
指定表单标题
label1
caption
请输入口令
指定标签1提示文本
text1
passwordchar
*
文本框口令不可视
text1
selectonentry
.t.
选中文本框的文字
command1
caption
退出
命令按钮1标题
4.编写代码。
表单form1的init事件代码:
publicc
c=0
&&c统计口令输入次数,每输入一次错误口令,c自动加1
命令按钮“退出”command1的click事件代码:
thisform.release
文本框text1的valid事件代码:
ifthis.value='1234'
=messagebox('口令正确,欢迎使用!
')
retu.t.
else
c=c+1
=messagebox('口令错误,请重输入!
这是第'+str(c,1)+'次输入!
')
retu.f.
ifc>=3
=messagebox('无权登陆,请退出!
')
&&口令输入超过3次
thisform.text1.enabled=.f.
endif
endif
thisform.refresh
5.调试运行界面如图8.2、8.3、8.4。
【例8.2】使用命令按钮设计一个调色板。
【设计要求】
1.在表单上放置5个命令按钮,按下“红”按钮时,表单背景颜色为红色;按下“黄”按钮时,表单背景颜色为黄色;按下“蓝”按钮时,表单背景颜色为蓝色;按下“白”按钮时,表单背景颜色为白色。
表单运行界面如图8.6所示。
图8.6“红色”按钮按下时运行界面图8.7表单设计界面
【实验步骤】
1.界面设计。
在“表单控件”工具栏上单击“命令按钮”控件,将command1-4拖至表单。
表单设计界面如图8.7所示。
2.题目分析
主要为颜色属性设置,通过rgb函数不同取值改变表单背景颜色。
3.属性设置。
表8.2对象属性设置
对象名
属性名
属性值
作用
form1
caption
调色板
指定表单标题
command1
caption
红
命令按钮1标题
command2
caption
黄
命令按钮2标题
command3
caption
蓝
命令按钮3标题
command4
caption
白
命令按钮4标题
4.事件代码。
命令按钮“红”command1的click事件代码:
thisform.backcolor=rgb(255,0,0)
&&通过rgb函数不同取值改变表单背景颜色
命令按钮“黄”command2的click事件代码:
thisform.backcolor=rgb(255,255,0)
命令按钮“蓝”command3的click事件代码:
thisform.backcolor=rgb(0,0,255)
命令按钮“白”command4的click事件代码:
thisform.backcolor=rgb(255,255,255)
5.调试运行界面如图8.6、8.7。
【例8.3】使用列表框实现数据互传。
【设计要求】
1.表单上放置源数据列表list1、目标数据列表list2,list1与学生表的“姓名”字段绑定;
2.表单运行时,按下“添加一项”按钮时,在list2中添加一个学生“姓名”;按下“全部添加”按钮时,将list1中的内容全部添加到list2中;
3.按下“移去一项”按钮时,将list2内容移去一项至list1;按下“全部移去”按钮时,将list2内容全部移至list1。
表单运行界面如图8.8、8.9、8.10、8.11所示。
图8.8“添加一项”运行界面图8.9“全部添加”运行界面
图8.10“移去一项”运行界面图8.11“全部移去”运行界面
【实验步骤】
1.界面设计。
在数据环境中添加学生表。
在“表单控件”工具栏上单击“命令按钮”控件、“标签”控件、“列表框”控件,将command1-4、label1-2、list1-2拖至表单,list1的数据源与学生表的“姓名”字段绑定。
表单设计界面如图8.12所示。
图8.12表单设计界面
2.题目分析。
(1)本题主要利用列表框的additem、removeitem和clear三个方法。
(2)“添加一项”将list1内容移到list2,即list1的内容减少一项(removeitem),list2的内容增加一项(additem);“移去一项”将list2的内容移到list1,list2减少一项(removetiem),list1增加一项(additem)。
(3)“全部添加”将list1内容全部移到list2,即list1全部清空(clear),list2内容为学生表的“姓名”,通过sacn/endscan循环将表的“姓名”全部加到list2;
(4)“全部移去”将list2内容全部移到list1,即list2全部清空(clear),list1内容为学生表的“姓名”,通过sacn/endscan循环将表的“姓名”全部加到list1。
3.属性设置。
表8.3对象属性设置
对象名
属性名
属性值
作用
form1
caption
列表框数据互传
指定表单标题
label1
caption
源数据列表
指定标签1提示文本
label2
caption
目标数据列表
指定标签2提示文本
list1
rowsource
无
列表框数据源
list1
rowsourcetype
0
列表框数据源类型
list2
rowsource
无
列表框数据源
list2
rowsourcetype
0
列表框数据源类型
command1
caption
添加一项
命令按钮1标题
command2
caption
全部添加
命令按钮2标题
command3
caption
移去一项
命令按钮3标题
command4
caption
全部移去
命令按钮4标题
4.编写代码。
命令按钮“添加一项”command1的click事件代码:
thisform.list2.additem(thisform.list1.value)
thisform.list1.removeitem(thisform.list1.listindex)
&&“添加一项”将list1内容移到list2,即list1的内容减少一项(removeitem),list2的内容增加一项(additem)。
thisform.refresh
命令按钮“全部添加”command2的click事件代码:
thisform.list1.clear
thisform.list2.clear
scan
thisform.list2.additem(姓名)
endscan
&&“全部添加”将list1内容全部移到list2,即list1全部清空(clear),list2内容为学生表的“姓名”。
thisform.refresh
命令按钮“移去一项”command3的click事件:
thisform.list1.additem(thisform.list2.value)
thisform.list2.removeitem(thisform.list2.listindex)
&&“移去一项”将list2的内容移到list1,list2减少一项(removetiem),list1增加一项(additem)。
thisform.refresh
命令按钮“全部移去”command4的click事件:
thisform.list2.clear
thisform.list1.clear
scan
thisform.list1.additem(姓名)
endscan
&&“全部移去”将list2内容全部移到list1,即list2全部清空(clear),list1内容为学生表的“姓名”。
thisform.refresh
5.运行界面如图8.8、8.9、8.10、8.11。
【例8.4】利用组合框统计学生的平均成绩。
【设计要求】
1.显示指定学生的平均成绩和成绩档次;
2.不及格的平均成绩和档次用红色显示;
3.组合框数据源与学生表“姓名”绑定,在组合框combo1中选中某学生时,按“确定”按钮,text1中显示该生姓名,text2中显示该学生平均成绩,text3显示成绩档次;
4.按“继续”按钮,组合框combo1获得焦点;
5.按“退出”按钮时,释放表单。
表单运行界面如图8.13、8.14所示。
图8.13查询学生平均成绩及档次图8.14按下“继续”按钮界面
【实验步骤】
1.界面设计。
将学生表、成绩表加入数据环境。
在“常用工具栏”单击“标签”、“命令按钮”、“组合框”、“文本框”控件,将label1-4、command1-3、combo1、text1-3拖至表单。
表单设计界面如图8.15所示。
图8.15表单设计界面
2.题目分析。
(1)组合框和‘学生’表中的“姓名”字段绑定,通过sacn-endscan循环,combo1的additem方法,将“姓名”加入combo1。
(2)数据环境中放置学生和成绩两张表,通过select语句切换表。
(不能使用use命令切换!
)。
combo1中输入的是学生的“姓名”,要统计该生的平均成绩,必须使用成绩表,而成绩表中只有“学号”字段,没有“姓名”字段,所以必须设置一个变量xh存储“学号”。
先选择学生表,查找该学生,若存在,将“学号“值取出放在变量xh中,再选择成绩表,用averrage函数求出该生的平均成绩pjcj。
(3)成绩等级可以通过substr字符串截取,也可以通过docase/endcase语句实现。
求出的成绩分为大于60分(不是红色字体)和小于60分(红色字体)两种情况。
3.属性设置。
表8.4对象属性设置
对象名
属性名
属性值
作用
form1
caption
成绩查询信息
指定表单标题
label1
caption
请输入或选择学生
标签1提示文本
label2
caption
学生
标签2提示文本
label3
caption
平均成绩
标签3提示文本
label4
caption
成绩等级
标签4提示文本
command1
caption
确定
命令按钮1标题
command2
caption
继续
命令按钮2标题
command3
caption
退出
命令按钮3标题
4.编写代码。
表单form1的init事件代码:
settalkoff
sele学生
scan
bo1.additem(学生.姓名)
endscan
&&组合框和学生表中的“姓名”字段绑定
命令按钮“确定”command1的click事件代码:
sele学生
locateforalltrim(姓名)=alltrim(bo1.value)
xh=学号
sele成绩
average成绩for学号=xhtopjcj
&&先选择学生表,查找该学生,若存在,将“学号”值取出放在变量xh中,再选择成绩表,用averrage函数求出该生的平均成绩pjcj。
ifpjcj<60
p=0
else
p=int(pjcj/10)-5
endif
ifpjcj>=0
dc=substr("不及格及格中良优",6*p+1,6)
&&成绩档次
thisform.text1.value=bo1.value
ifpjcj<60
thisform.text2.forecolor=rgb(255,0,0)
thisform.text3.forecolor=rgb(255,0,0)
&&成绩小于60分用红色背景
else
thisform.text2.forecolor=rgb(0,0,255)
thisform.text3.forecolor=rgb(0,0,255)
endif
thisform.text2.value=pjcj
thisform.text3.value=dc
endif
thisform.text1.setfocus
thisform.refresh
命令按钮‘继续’command2的click事件代码:
bo1.setfocus
thisform.setall("value","","textbox")
thisform.refresh
命令按钮‘退出’commnad3的click事件代码:
thisform.release
5.调试运行界面如图8.13、8.14。
【例8.5】利用计数器设计一个数字时钟计数器。
【设计要求】
1.表单运行时,按下“复位”按钮,计数器清0;
2.按“计时”按钮时,从0开始计时;
3.按“停止”按钮时,停止计数,文本框显示暂停时的计时;
4.按下“退出”时,释放表单。
运行界面如图8.16、8.17、8.18所示。
图8.16表单运行初始界面图8.17按“计时”按钮表单运行界面
图8.18按“停止”按钮表单运行界面图8.19表单设计界面
【实验步骤】
1.创建表单。
在表单上单击“常用工具栏”,将时钟timer1、文本框text1、4个命令按钮command1-4拖至表单。
表单初始界面如图8.19所示。
2.题目分析。
(1)为进行分、秒、时的计时工作,新增3个表单属性thisform.m(代表秒)、thisform.f(代表分)、thisform.s(代表小时)。
(2)表单刚运行时,计时器不工作(enabled为假),thisform.m、thisfor.f、thisform.s为0,文本框显示“00:
00:
00”。
(3)“复位”按钮,表示计数从0开始,文本框显示“00:
00:
00”同时thisform.m、thisfor.f、thisform.s全部清为0。
(4)“计时”按钮表示计数器开始工作(enabled为真),每隔1秒进入timer1的timer事件;“停止”表示计数器停止工作(enabled为假)。
(5)计数器每隔1秒加1,从秒开始(thisform.m),当秒加到60,分加1(thisform.f),秒清0;当分加到60,时加1(thisform.s),分、秒清0;当时加到24,秒、分、时全清0。
3.属性设置。
新建表单属性thisform.m、thisform.f、thisform.s,代表计时秒、分、小时。
表8.5对象属性设置
对象名
属性名
属性值
作用
form1
caption
计时器
指定表单标题
command1
caption
复位
命令按钮1标题
command2
caption
计时
命令按钮2标题
command3
caption
停止
命令按钮3标题
command4
caption
退出
命令按钮4标题
text1
fontsize
48
设置文本框字体大小
timer1
interval
1000
设置计时器时间间隔
4.编写代码。
表单form1的init事件代码:
thisform.timer1.enabled=.f.
thisform.text1.value='00:
00:
00'
thisform.m=0
thisform.s=0
thisform.f=0
&&表单刚运行时,计时器不工作(enabled为假),thisform.m、thisfor.f、
thisform.s为0,文本框显示“00:
00:
00”。
命令按钮“复位”command1的click事件代码:
thisform.text1.value='00:
00:
00'
thisform.timer1.enabled=.f.
thisform.m=0
thisform.s=0
thisform.f=0
&&“复位”按钮,表示计数从0开始,文本框显示“00:
00:
00”同时thisform.m、
thisfor.f、thisform.s全部清为0。
thisform.refresh
命令按钮“计时”command2的click事件代码:
thisform.timer1.enabled=.t.
命令按钮“停止”command3的click事件代码:
thisform.timer1.enabled=.f.
命令按钮“退出”command4的click事件代码:
thisform.release
timer1的timer事件代码:
thisform.m=thisform.m+1
ifthisform.m=60
thisform.f=thisform.f+1
thisform.m=0
ifthisform.f=60
thisform.s=thisform.s+1
thisform.f=0
ifthisform.s=24
thisform.s=0
thisform.m=0
thisform.f=0
endif
endif
endif
&&计数器每隔1秒加1,从秒开始(thisform.m),当秒加到60,分加1(thisform.f),
&&秒清0;当分加到60,时加1(thisform.s),分、秒清0;当时加到24,秒、分、&&时全清0。
mm=iif(thisform.m<10,'0'+str(thisform.m,1),str(thisform.m,2))
ff=iif(thisform.f<10,'0'+str(thisform.f,1),str(thisform.f,2))
ss=iif(thisform.s<10,'0'+str(thisform.s,1),str(thisform.s,2))
&&若数字小于10,再数字前面加一个前“0”
thisform.text1.value=ss+':
'+ff+':
'+mm
thisform.refresh
5.调试运行界面如图8.16、8.17、8.18。
五、上机练习题
【练习8.1】设计一个可以改变表单标题和标签控件标题的表单,表单刚运行时,表单的标题为form1,标签的标题为label1,如图8.20(a)。
要求:
鼠标单击标签控件后,表单的标题显示为“欢迎表单”,表单的背景颜色变为红色,标签的标题显示为“欢迎使用vfp”,表单运行界面如图8.20(b)。
(b)
图8.20练习8.1
【练习8.2】设计一个调查表单,能够统计手机使用的网络类型。
要求:
(1)被调查者选择网络类型,单击“提交”按钮后,更改”手机类型.dbf”相应字段的内容;
(2)单击“查看”按钮,显示目前为止各手机使用的网络类型的累计数值。
手机类型.dbf (b)(c)单击“查看”按钮
图8.11练习8.2
【练习8.3】设计一个中文日历表单.
要求:
(1)文本框中显示汉语格式的日期;
(2)单击微调控件的向上箭头时,日期加一天,单击微调控件的向下箭头时,日期减一天。
图8.22 练习8.3
【练习8.4】创建一个求指定班级平均成绩的表单。
要求:
(1)在组合框中选择班级(学号的左四位)后,表单将自动显示对应班级的所有学生的总平均成绩;
(2)按"退出"按钮时,自动关闭表单。
图8.23 练习8.4
【练习8.5】查询指定班级的学生名单。
要求:
(1)输入班级号按“确定”按钮后,把指定班级的学生名单添加到组合框中;
(2)在学生名单添加到组合框后,在组合框中选择一个学生姓名,标签3提示当前学生的记录号。
图8.24 练习8.5
【练习8.6】创建一个动态显示信息的表单,在文本框中显示文字“欢迎使用表单”。
要求:
每秒显示一个字(如图8.25(a)、(b)所示),当全部显示完毕图(c)再回到图(a)重新开始每秒逐个显示,直到按下退出按钮为止。
图8.25 练习8.6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 常用 控件 对象 综合 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)