要点:1.掌握表单设计中常用控件的使用2.掌握循环辅助语句的使用3.数组在程序中的应用4.了解多重循环(考试不涉及)第七、八讲程序设计(2)进一步讨论对象的事件和方法1、事件(Event)教科书P9事件是作用于对象的某些行为和动作。事件(Event)是预先定义好的特定的动作,不能修改、增加和删除,由用户或系统激活。对象不同,事件也不完全相同。事件事件发生的运行状态Load创建对象之前。Init创建对象。Click鼠标左键单击对象。DblClick鼠标左键双击对象。RightClick鼠标右键单击对象。GotFocus对象接收焦点,由用户动作引起,如按Tab键或单击,或者在代码中使用SetFocus方法程序。LostFocus对象失去焦点,由用户动作引起,如按Tab键或单击,或者在代码中使用SetFocus方法程序使焦点移到别的对象上。Valid对象失去焦点前发生Load事件在创建表单之前发生,该事件代码从表单装入内存至表单被释放期间只运行一次。Init在创建表单时触发该事件,该事件发生在Load事件后,也只执行一次。圆面积程序修改1文本框text2获得焦点,即光标移到文本框text2中输入半径后,按Tab键,光标移到文本框text2中显示圆面积圆面积程序修改2文本框text1失去焦点,即在文本框text1中输入面积后,敲回车键(该事件可以换成Lostfocus)输入半径后,按回车键,在文本框text2中显示圆面积2、方法(Event)教科书P10方法是指对象自身可以进行的动作或行为。它实际上是对象本身所内含的一些特殊的函数或过程,以便实现对象的一些固有功能。可以通过调用对象的方法实现该对象的动作及行为。直接调用的对象方法程序不多,主要有:刷新(Refresh)、释放(Release)、设置焦点(setfocus)。在面向对象的程序设计过程中,可为对象创建新的属性和方法程序。见教材P53-54【例3-3】、P55-56【例3-5】(教材P6)【例1-2】设计如图1-11所示表单,表单运行后,在两个文本框中分别输入一个数,比较大小,光标移到文本框text3时,在其中显示最大数;单击“关闭”按钮,可以关闭表单。①文本框text3的“GotFocus”事件代码:Thisform.text3.value=max(thisform.text1.value,thisform.text2.value)②“关闭”按钮的“Click”事件的程序代码:Thisform.release关闭表单表单设计中的常用控件Vfp的基类有两类:控件类容器类产生控件类对象产生容器类对象生成器锁定对象选定按钮选定:设定连续建立某一控件表单控件工具栏,直接添加控件。生成器锁定后,添加控件即可弹出生成器对话框输入类控件文本框Text组合框Combo列表框List输出类控件标签Label文本框Text表格Grid编辑框Edit列表框List选择类控件选项按钮组OptionGroup复选框Check组合框Combo列表框List控制类控件命令按钮Command命令按钮组CommandGroup计时器Timer容器类控件表格Grid命令按钮组CommandGroup选择按钮组OptionGroup表单Form标签(label)主要属性:Caption、BackStyle、WordWrap控件类标签没有Value属性教材P16仔细体会教科书P12【例1-3】命令按钮(command)主要属性:Caption、Enabled主要事件:Click控件类教材P17该属性值为.F.,则命令按钮呈灰色显示,表示暂时不可用。表示为:Thisform.command1.enabled=.f.该属性值为.T.,则命令按钮呈深色显示,表示可用。表示为:Thisform.command1.enabled=.t.Click事件代码:ifthisform.command2.caption=可用thisform.command2.caption=不可用Thisform.command2.enabled=.f.elsethisform.command2.caption=可用Thisform.command2.enabled=.t.endif文本框(text)主要属性:PasswordChar、Value、ControlSource主要事件:Valid、GotFocus、Lostfocus主要方法:setfocus控件类要让文本框接收小数,可以将其属性值设置为:0.0教材P16仔细体会教科书P6【例1-2】、P14【例1-4】对用户输入口令时显示的字符进行设置改写圆面积程序注意:这两个圆面积程序中的This,表示当前编写代码的对象。这是一种相对引用。见教材P13第一个程序是对text1编写代码,This就表示text1;第一个程序是对text2编写代码,This就表示Text2。组合框(Combo)主要属性:RowSource、RowSourceType主要事件:InteractiveChange控件类教材P28仔细体会教科书P26【例2-4】、P38【例2-12】组合框中数据源的类型组合框中的数据源【例】运行表单后在组合框combo1中选择一个字号,标签label2变为相应的字号。组合框combo1的interactivechange事件代码:thisform.label2.fontsize=val(thisform.combo1.value)计时器(timer)主要属性:Enabled、Interval主要事件:timer控件类值为.t.,计时器运行值为.f.,计时器不运行单位为:毫秒教材P41仔细体会教科书P40【例2-13】【例】运行表单后在标签label1中自动显示时钟。计时器timer1的interval属性值为1000计时器timer1的timer事件代码:Thisform.label1.caption=time()命令按钮组(commandGroup)主要属性:ButtonCount、Value主要事件:Click容器类包含command1、command2等,设置每个按钮的caption属性:单击右键,选择“编辑”Thisform.commandgroup1.value=ii=1,表示鼠标单击第一个命令按钮;i=2,表示鼠标单击第二个命令按钮......。教材P119【例】运行表单后单击命令按钮组中的不同按钮,标签label1的文本改为相应的字体,单击关闭按钮可以关闭表单。命令按钮组Commandgroup1的click事件代码如下:docasecasethis.value=1thisform.label1.fontname=宋体casethis.value=2thisform.label1.fontname=黑体casethis.value=3thisform.label1.fontname=楷体casethis.value=4thisform.label1.fontname=隶书casethis.value=5thisform.releaseendcase表示什么?Commandgroup1第几个命令按钮1表示逻辑真,0表示逻辑假复选框(check)主要属性:Caption、Value控件类【例】运行表单后单击复选框后,标签label1的文本发生相应的变化。“斜体”复选框的click事件代码ifthis.value=1thisform.label1.fontitalic=.t.elsethisform.label1.fontitalic=.f.endif“黑体”复选框的click事件代码ifthis.value=1thisform.label1.fontname=黑体elsethisform.label1.fontname=宋体endif“红色”复选框的click事件代码ifthis.value=1thisform.label1.forecolor=rgb(255,0,0)elsethisform.label1.forecolor=rgb(0,0,0)endifThis表示什么?1是什么意思选项按钮组(OptionGroup)主要属性:ButtonCount、Caption、ControlSource、value容器类包含option1、option2等,设置每个选项的caption属性:单击右键,选择“编辑”选项按钮组的Value属性表示选中了第几个按钮,如果全部按钮都未选,其值是0;第一个按钮被选中(中间有“”),其值为1;第一个按钮被选中,其值为2……。系统启动后,默认的Value值是1。【例】如图所示,编写一个简易计算器。要求在文本框Text1中输入数字,然后在OptionGroup1中选择运算符,然后在Text2中输入另一个数字,按回车,则在文本框Text3中显示计算结果。请编写Text2的LostFocus事件代码。文本框Text2的LostFocus事件代码:x=val(thisform.text1.text)y=val(thisform.text2.text)docasecasethisform.optiongroup1.value=1z=x+ycasethisform.optiongroup1.value=2z=x-ycasethisform.optiongroup1.value=3z=x*ycasethisform.optiongroup1.value=4z=x/yendcasethisform.text3.value=z对应第几个按钮列表框(List)主要属性:ColumnCount、ColumnWidths主要事件:InteractiveChange主要方法:AddItem、AddListItem控件类教材P65添加单列数据添加多列数据掌握两个方法的使用必须设置每一列的宽度【例】设计如图所示表单,单击“输出”按钮,列表框中显示一个由“*”构成的直角三角形。(利用列表框的AddItem方法)【例】运行表单后单击“输出”按钮,在列表框中输出斐波拉切数列的前20项,每行显示5个数。(注:斐波拉切数列的前两个数是1、1,第三个数是前两个数的和,以后的每个数都是前两个数之和。)在1、1、2、3、5、8、13、21……中,从第三个数开始,每个数都等于前两个数的和。这一奇特的数列是由意大利数学家斐波那契从兔子繁殖问题中提出的,为了纪念他,人们就把这种数列称为斐波那契数列,也称兔子数列。斐波那契发现兔子繁殖非常快,几个月后,1对兔子就变成了几十对。每对成年兔每个月都能生出1对兔宝宝,而兔宝宝一个月后便有生殖能力,两个月后就能生下第一对小兔。这样一月初有1对兔宝宝,二月初小兔交配,三月初新生1对兔宝宝,有2对兔子,四月再生1对小兔,有3对兔子,五月比上月多生1对兔宝宝(三月出生的小兔生的),有2对兔宝宝,共有5对兔子,六月又比上月多生1对兔宝宝(四月出生的小兔生的),共8对。这样一到六月兔子的对数就是1、1、2、3、、5、8,从第三个数开始,每个数都是前两个数的和,继续推理下去仍是如此。除此以外,人们从很多地方也发现了这类数列。如:茉莉花(3个花瓣),毛莨(5个花瓣),翠雀(8个花瓣),万寿菊(13个花瓣),紫宛(21个花瓣),雏菊(34、55或89个花瓣)。这些花的花瓣数恰好构成斐波那契数列中的一串数。列表框的columncount属性初值为5,columnLines属性初值为.F.,columnwidths属性初值为30,30,30,30,30确定变量:F1:第一个数初值:F1=1F2:第二个数初值:F2=1F3:第三个数F3=F1+F2F1=F2F2=F3F3=F1+F2递推此F1,F2,F3非彼F1,F2,F3“输出”命令按钮的“click”事件代码:f1=1f2=1thisform.list1.addlistitem(1,1,1)thisform.list1.addlistitem(1,1,2)x=1y=3fori=3to20f3=f1+f2this