VF表单编程例题详解.docx
《VF表单编程例题详解.docx》由会员分享,可在线阅读,更多相关《VF表单编程例题详解.docx(21页珍藏版)》请在冰点文库上搜索。
VF表单编程例题详解
11.1表单的建立与运行
●创建表单的过程,就是定义控件的属性,确定事件或方法、代码的过程。
●表单就是一个容器,它可以容纳多个控件。
●11.1.2用表单设计器创建表单
●打开表单设计器:
●Createform
●文件/新建/表单/新建文件
11.1表单的建立与运行
●2.表单设计器环境
●
(1)属性窗口
●表单及其控件均称为对象,每个对象都有自己属性,事件和方法。
●有的属性值可以在设置框中输入,有的需要从系统所提供的一组属性值中指定
●有的属性是只读的,用户不能修改,斜体显示
●要为属性设置一个字符值,可以在设置框中直接输入,不要加定界符。
(2)表单控件工具栏
要求会使用的控件:
标签、文本框、编辑框、命令按钮、组合框、列表框和表格
(3)表单设计器工具栏
(4)表单菜单
表单中的对象设计过程:
向表单添加控件-->设置属性-->设计代码
11.1.3表单的运行
有2种方法可以运行表单:
(1)直接使用命令DOFORM〈表单名〉
(2)在表单设计器窗口,选择“表单”菜单中的“运
行”命令,或直接单击工具栏中的红色惊叹号。
保存表单时,表单将被保存为一个表单文件(扩展名是.scx)和一个表单备注文件(扩展名是.sct)(P196)
11.2表单的操作
11.2.1表单的属性
1.常用表单属性
表单属性很多,但绝大多数很少用到。
表11.3中列出了有关表单的一些重要属性,这些属性规定了表单的外观和行为,经常在表单设计时用到。
请大家参考表11.3。
11.2.2常用事件与方法
事件:
一种系统预先定义而由用户或系统发出的动作
2.表单事件
以下3个事件用于表单和表单集:
(1)Load事件:
该事件代码从表单装入内存至表单被释放期间仅被运行一次。
(2)UnLoad事件:
在表单被释放时发生,是释放表单或表单集的最后一个事件。
(3)Activate事件:
常用设置表单上控件的初值和初始属性。
3.鼠标事件
Click事件:
鼠标左键单击对象时发生的事件。
4.键盘事件
InteractiveChange事件。
7.常用方法
Release方法:
从内存中释放表单
Refresh方法:
刷新表单数据
11.2.3控件的操作与布局
1.控件的基本操作
(1)选定控件:
要用鼠标单击该控件即可。
(2)移动控件:
先选定控件,然后用鼠标将控件
拖动到所需要的位置即可。
(3)调整控件大小
(4)复制控件
(5)删除控件
11.2.4表单的数据环境
●4.打开数据环境设计器
●单击表单设计器工具栏上的“数据环境”按钮
●选择“显示”菜单中的“数据环境”命令
●5.向数据环境添加表或视图
●6.从数据环境移去表或视图
●7.在数据环境中设置关系
●8.在数据环境中编辑关系
●9.向表单添加字段
11.3常用表单控件
11.3.1添加表单控件
表单中添加什么样的控件是根据需求决定的,一旦确定了控件的类型,就要定义控件的属性、确定事件和方法代码。
11.3.2表单控件及其属性
1.标签控件(Lable)
“标签”控件是按一定格式显示在表单上的文本信息,用来显示表单中各种说明和提示信息。
一旦“标签”控件的属性、事件和方法被定义,输出信息将根据这些定义,按指定的格式输出。
“标签”控件的属性主要包括:
Caption,Name,FontName,FontSize
例子11.3
表单中有3个标签。
当鼠标单击任何一个标签时,其他两个标签的标题文本互换。
T=thisform.label2.caption
Thisform.label.caption=thisform.label3.caption
Thisform.label.captio=T
11.3.2命令按钮控件
“命令按钮”控件主要用来控制程序的执行过程,以及对表中数据的操作等。
“命令按钮”控件的属性主要包括:
caption,name
“命令按钮”控件的事件:
click
11.3.3文本框控件
“文本框”控件主要用于表中非备注型和通用型字段值的输入、输出,以及内存变量赋值和输出等操作。
“文本框”控件与“标签”控件最主要的区别在于它们使用的数据源是不同的。
常用属性:
Value,ControlSource
“标签”控件的数据源来自于其“Caption”属性,“文本框”控件的数据源来自于其“ControlSource”属性,可以是表中的非备注型、通用型字段和内存变量。
“文本框”控件的属性主要包括:
“文本框”的大小,“文本框”中输入、输出信息字体的大小、风格和颜色等。
11.3.3编辑框控件
和文本框相似,也是用来输入用户的数据,但编辑框的内容只能是文本数据。
例子11.4求100到1000间能被37整除的数。
要求在编辑框中显示输出结果,并通过命令按钮来控制输出。
k=0
forx=100to1000
ifx%37=0
thisform.edit1.value=thisform.edit1.value+str(x,5)
k=k+1
ifk%5=0
thisform.edit1.value=thisform.edit1.value+chr(13)
endif
endif
endfor
11.3.6列表框与组合框控件
列表框(listbox)控件提供一组选项,用户可以从中选择一个或者多个选项。
列表框显示其中的若干选项,用户可以通过滚动条浏览其他选项。
要求掌握的属性:
ControlSource、RowSource、RowSourceType
任意时刻用户都能看到多个项
11.3.6列表框与组合框控件
“组合框”控件由一个列表框和一个编辑框组成。
两种类型:
1、下拉组合框style属性为0的组合框
可以通过滚动条查看也可以在框中直接输入查看
2、下拉列表框style属性为2的组合框
只能通过滚动条查看,任意时刻只能看见一项
11.3.7表格控件(Grid)
表格是一个容器对象,包含列(Column)。
每个列对象包含一个标头(Header)和若干控件。
“表格”控件的主要属性是:
Columncount,用来定义表格的列数。
标头的主要属性:
Caption
C2-类型1-例子1
设计表单form1,表单中有命令按钮command1和编辑框edit1,单击命令按钮时将计算下面数列前n项(设n=50)中偶数项的和(结果取4位小数),并将结果显示在edit1中。
1/(1×2×3),1/(2×3×4),1/(3×4×5),……,1/(n×(n+1)×(n+2)),……
结果:
0.0568
C2-类型2-例2
设计表单form1,表单中有命令按钮command1、一个编辑框edit1和一个文本框text1,在edit1中输入下面内容:
“TheauthorswouldliketosincerelythankserieseditorDavidChappellforhisinvaluableassistanceinreviewingseveralearlydraftsofthemanuscriptandprovidingunwaveringclarityandvisionduringmajorrewritestoguidethebooktowarditscurrentform.WewouldalsoliketothankRichBonneauforhishelpduringtheinitialplanningstages.”,
单击命令按钮统计满足下面条件的字符的ASCII码值的和:
字符的ASCII码值能被3整除;并将结果显示在text1中。
注意:
内容中不包含任意回车换行符。
C2-类型2-例3
设计表单form1,表单中有命令按钮command1、两个编辑框edit1和edit2,在edit1中输内容:
"546363463424214398439583252341243452350932059549786546845684509345348
3683468034665893498954343894394346832894387233849683496783486306830669343954359309346834893436438683496346346348765324234234235459487634534345345324
345634634631513534534634323867867846474",单击按钮分别统计出1、2和3在上面字符串中出现的次数,并将统计结果分三行显示在edit2中。
结果:
41560
C2-类型2-例4
设计表单form1,表单中有命令按钮command1和两个文本框text1及text2,在text1中输入字符串"HowandwhyWebservicesprovidetheidealfoundationforSOA",单击命令按钮计算该字符串奇数位置中每个字符的ASCII码值的和,即H、W、a等,并将结果显示在text2框中。
结果:
2906
●有关日期的函数
●Ctod将字符串转换成日期
●Dtoc将日期转换为字符串
●setcenturyon
●Setdatetoymd
●Setstrito0
●Dow(日期表达式):
返回每周的第几天,即星期几
●Cdow(日期表达式):
返回英文星期几
●将数值转换成字符串函数:
str
●STR(数值型表达式1,数值型表达式2,数值型表达式3)
●功能:
将表达式1的值转换成字符串,转换成字符串的长度
●由表达式2决定,保留的小数位数由表达式3决定。
●省略表达式3时,转换后无小数部分;省略表达式2和表达式3时,字符串长度为10,无小数部分
几点有用的规律
1.文本框的value属性可以是文本也可以是数值
2.编辑框的value属性只能是文本
3.向列表框list或者组合框combo添加一项的格式:
Thisform.list1.additem(添加内容)
Tbo1.additem(添加内容)
其中,添加内容必须是文本格式,若不是请进行转换
4.将结果现在文本框或者是编辑框中,可以表示为:
Thisform.text1.value=内容
Thisform.edit1.value=内容(必须是文本)
5.将结果显示在标签label中,可以表示为:
Thisform.label1.caption=内容(必须是文本)
6.单击命令按钮退出,使用如下代码:
thisform.release
C2-类型3-日期
设计表单form1,表单中有命令按钮command1、一个文本框text1和一个组合框combo1,单击命令按钮将1910年到2254年间的国庆节添加到combo1中,然后计算出1910年到2254年间的每个国庆节是星期日的次数,并将计算结果显示在text1中。
参考答案:
49
●setcenton
●setdatetoymd
●setstrito0
●n=0
●fori=1910to2254
●d=str(i)+"/10/01"
●bo1.additem(alltrim(d))
●t=ctod(alltrim(d))
●xq=cdow(t)
●ifxq="Sunday"||ifcdow(ctod(alltrim(d)))=“Sunday”
●n=n+1
●endif
●Endfor
●thisform.text1.value=n
c2-类型3-日期
设计表单form1,表单中有命令按钮command1、一个文本框text1和一个列表框list1,单击命令按钮将1800年到1900年间的元旦日添加到list1中,然后利用函数计算出1800年到1900年间的每个元旦日是星期几,并将该函数值累加,将计算结果显示在text1中。
参考答案:
403
●setcenturyon
●setdatetoymd
●Setstrito0(p37)
●n=0
●fori=1800to1900
●d=str(i)+"/1/1"
●thisform.list1.additem(alltrim(d))
●dd=ctod(d)
●n=n+dow(dd)||n=n+dow(ctod(d))
●endfor
●thisform.text1.value=
在做题之前,应对题中所用到表有所熟悉:
自由表t3.dbf
包含如下字段:
bianhao字符型,宽度8
xingming字符型,宽度8
mima字符型,宽度6
chusny日期型,宽度8
gongzsj日期型,宽度8
hunfo逻辑型,宽度1
jiangjin数值型,宽度7,小数位数2
gongzi数值型,宽度7,小数位数2
C3-例题1查找姓名或编号类
请将自由表{}下载到你的考试文件夹中,并按下面的要求完成程序设计:
1.设计一个表单,表单的标题为“最大年龄人数和编号查询”,名称为tjform,表单中有三个命令按钮和三个编辑框edit1、edit2和edit3,三个按钮的标题分别为“编号查询”,“最大年龄人数”和“退出”。
2.在edit1中输入编号(bianhao),单击“编号查询”按钮将在文本框edit2中显示该编号的姓名(xingming)。
如果没有找到该编号,将在edit2中显示"NOFOUND"。
3.单击“最大年龄人数”按钮统计出年龄等于所有记录最大年龄的记录个数,并将它显示在文本框edit3中。
(注:
年龄=2005-出生年份+1,出生年月字段为chusny)。
4.单击“退出”按钮将关闭表单。
C3-例2处理密码类
现有自由表{},按下面要求完成程序设计:
1.设计一个表单,表单的标题为“密码处理”,名称为tjform,表单中有三个命令按钮和两个标签,三个按钮的标题分别为“处理密码”,“最高位统计”和“退出”。
2.单击“处理密码”按钮将每个记录的密码(mima)最左边的位加1(如果加1后大于9,则取9),其它位不变,并将处理后密码写入表中。
updatet3setmima=;
str(val(substr(mima,1,1))+1,1)+substr(mima,2,5);
wheresubstr(mima,1,1)!
="9“
(注意:
在调试之前必须将t3.DBF文件备份,因为每次调试可能要改变原始表中的数据)。
结果:
6679
3.单击“最高位统计”按钮将统计所有记录的密码中最左边数字的和以及它们中的最大值,并将结果分别显示在两个标签中。
selectsum(val(substr(mima,1,1)))ashe,max(val(substr(mima,1,1)))aszuidafromt3intocursort31
thisform.label1.caption=str(he,10)
thisform.label2.caption=str(zuida,1)
4.单击“退出”按钮将关闭表单。
thisform.release
C3-例3所有记录添加组合框或者列表框
1.设计一个表单,表单的标题为“显示姓名和统计”,名称为tjform,表单中有三个命令按钮、两个列表框list1和list2,一个文本框text1,三个按钮的标题分别为“显示姓名”,“统计”和“退出”。
2.单击“显示姓名”按钮将所有记录的姓名(xingming)添加到list1中。
uset3
dowhile.not.eof()
thisform.list1.additem(t3.xingming)
skip
enddo
use
●3.单击“统计”按钮统计出参加工作时间(gongzsj与出生日期(chusny)均为星期一的人数,将人数显示在text1中,并将他们的记录号分别显示在list2中。
●selectcount(*)asrenshufromt3;
●wherecdow(gongzsj)="Monday"andcdow(chusny)="Monday"intocursort31
●thisform.text1.value=t31.renshu
●selectrecno()asrecfromt3;
●wherecdow(gongzsj)="Monday"andcdow(chusny)="Monday"intocursort32
●dowhile.not.eof()
●thisform.list2.additem(str(t32.rec))
●skip
●enddo
●closeall
C3-例4数据更新类
现有自由表{},按下面要求完成程序设计:
1.设计一个表单,表单的标题为“统计和减少工资”,名称为tjform,表单中有三个命令按钮和一个列表框,三个按钮的标题分别为“减少工资”,“千元统计”和“退出”。
2.单击“减少工资”按钮将每个记录的工资(gongzi)减少原工资的10.67%。
updatet3setgongzi=gongzi-gongzi*0.1067
3.单击“千元统计”按钮将统计所有记录减少后的工资(gongzi)中的千位数字的和及千位数字中的最大值,并将统计的两个数值分两行显示在列表框中。
只计算千位中值,没有千位按0计算。
selectsum(int(gongzi/1000))ashe,max(int(gongzi/1000))aszuidafromt3intocursort31
thisform.list1.additem(str(he))
thisform.list1.additem(chr(13))
thisform.list1.additem(str(zuida))
4.单击“退出”按钮将关闭表单。
C-13单击增加一项类
请将自由表{}下载到你的考试文件夹中,并按下面的要求完成程序设计:
1.设计一个表单,表单的标题为“等于平均人数和浏览”,名称为tjform,表单中有三个按钮、一个组合框和一个文本框,三个按钮的标题分别为“下一个”,“等于平均”和“退出”。
2.单击“下一个”按钮将在组合框中添加下一个记录的姓名(xingming)。
如果到表尾,将添加第一个记录中的姓名。
设置表单的load事件:
uset3
bo1.additem(t3.xingming)
skip
ifeof()
gotop
endif
3.单击“等于平均”按钮统计出年龄等于所有记录平均年龄的记录个数,并将它显示在文本框中。
selectcount(*)asgsfromt3where2005-year(chusny)+1=;(selectavg(2005-year(chusny)+1)aspingjunfromt3)intocursort32
thisform.text1.value=gs
(注:
年龄=2005-出生年份+1,出生年月字段为chusny)。
4.单击“退出”按钮将关闭表单。
thisform.release
C-35表格类
1.设计一个表单,表单的标题为“调整工资和查询”,名称为tzform,表单中有三个命令按钮、一个文本框和一个窗格(grid),三个按钮的标题分别为“查询”,“调整工资”和“退出”。
2.单击“查询”按钮将在窗格中显示所有奖金(jiangjin)不小于230的记录,窗格中显示编号(bianhao)、姓名(xingming)、奖金(jiangjin)和出生年月(chusny)。
设置grid的属性:
ColumnCount=4
RecordSourceType=4-SQL说明
thisform.grid1.recordsource="selectbianhao,xingming,jiangjin,chusnyfromt3wherejiangjin>=230intocursort31"
3.单击“调整工资”按钮将按下面方法修改每个记录的工资(gongzi)数:
1970年(不包括1970)以后出生的工资增加155.10,否则工资增加215.20。
然后将调整前后工资总数之差显示在文本框中。
selectsum(gongzi)asqianhefromt3intocursort32
updatet3setgongzi=gongzi+155.10whereyear(chusny)>1970
updatet3setgongzi=gongzi+215.20whereyear(chusny)<=1970
selectsum(gongzi)ashouhefromt3intocursort33
thisform.text1.value=t33.houhe-t32.qianhe
4.单击“退出”按钮将关闭表单。
Thisform.release
C3-31
请将自由表{}下载到你的考试文件夹中,并按下面的要求完成程序设计:
1.设计一个表单,表单的标题为“已婚最小年龄和浏览”,名称为tjform,表单中有三个命令按钮和两个编辑框,三个按钮的标题分别为“上一个”,“最小年龄”和“退出”。
2.单击“上一个”按钮将在一个编辑框中显示上一个记录的姓名(xingming)。
如果到表首,将显示最后一个记录。
(1)设置表单的load事件:
uset3
(2)thisform.edit1.value=xingming
skip-1
ifbof()
gobottom
endif
3.单击“最小年龄”按钮计算已婚(hunfo为真)的最小年龄,并将最小年龄显示在另一个编辑框中。
(注:
年龄=2005-出生年份+1,出生年月字段为chusny)。
selectmin(2005-year(chusny)+1)aszuixiaofromt3wherehunfo=.t.intocursort31
thisform.edit2.value=str(zuixiao)
4.单击“退出”按钮将关闭表单。
thisform.release
C3-20记录增加一项类
请将自由表{}下载到你的考试文件夹中,并按下面的要求完成程序设计:
1.设计一个表单,表单的标题为“最大