自定义属性与方法.ppt

上传人:牧羊曲112 文档编号:6019635 上传时间:2023-09-15 格式:PPT 页数:33 大小:228KB
返回 下载 相关 举报
自定义属性与方法.ppt_第1页
第1页 / 共33页
自定义属性与方法.ppt_第2页
第2页 / 共33页
自定义属性与方法.ppt_第3页
第3页 / 共33页
自定义属性与方法.ppt_第4页
第4页 / 共33页
自定义属性与方法.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《自定义属性与方法.ppt》由会员分享,可在线阅读,更多相关《自定义属性与方法.ppt(33页珍藏版)》请在三一办公上搜索。

1、,第 8 章,自定义属性与方法,8.1 自定义属性,8.2 自定义方法,如果说内存变量是个自由数据元素,那么属性就是与某对象相联系的数据元素。自定义属性就是依附到表单上的内存变量,在表单存在时期内,可以象“全局变量”一样使用。由于属性的使用需要严格的引用格式(对象.属性),使得属性使用起来在某种程度上比传统的xBASE变量作用域(全局、局部、私有)更加安全。在某些场合,可以使用“属性”来代替使用“变量”。而方法则是VFP中的一个新式的程序组装方式限制在一个对象中的子程序。,第8章 自定义属性与方法,过程间的数据传递除参数传递,还有一种是按变量的作用域传递数据。全局变量:PUBLIC 定义变量以

2、后,在任何过程中都可使用的变量。私有变量:PRIVATE 未加任何变量类型说明,直接赋值使用的内存变量,本过程其被调用的下层过程中有效。本过程运行结束,变量无效。区域变量:LOCAL 区域变量只能在建立它的过程中使用,不能在上层及下层过程中使用。例题:内存变量作用域例题.prg大小写转换.scx变量作用域.scx,变量作用域,VFP允许用户像定义变量一样自定义各种类型的属性。自定义属性只能依附于表单对象 对于由控件创建的对象,无法增加新的属性。8.1.1 添加自定义属性 例如:在表单中添加一个自定义的属性Sec 在表单设计器,单击“表单”项,选择“新建属性”,打开新建属性对话框。在“名称(Na

3、me)”栏中填入自定义属性的名称Sec,然后在“说明”栏中填入该属性的简单说明:单击“添加”按钮后再单击“关闭”按钮,退出“新建属性”对话框。此时,在属性窗口的“其他”选项卡中可以看见新建的属性及其说明,新定义属性的类型为逻辑型,值为:.F.,我们可以将它改为其他类型,如数值型值:0,8.1 自定义属性,教学进程,【例8-1】设计一个计时器,能够设置倒计时的时间,并进行倒计时。设计步骤如下:,(1)添加自定义属性。(2)建立应用程序用户界面与设置属性。,8.1 自定义属性,添加自定义属性,(3)编写代码。编写微调器Spinner1的InteractiveChange事件代码:THISFORM.

4、sec=THIS.Value*60&给属性SEC赋初始秒数a1=THIS.Valuea2=IIF(a1%60 10,“0”+STR(a1%60,1),STR(a1%60,2)&分钟a3=STR(INT(a1/60),1)&小时,教学进程,THISFORM.Text1.Value=0+a3+:+a2+:00IF a1 0 THISFORM.Command1.Enabled=.T.ELSE THISFORM.Command1.Enabled=.F.ENDIF 编写命令按钮Command1的Click事件代码:THISFORM.Timer1.Enabled=.T.THISFORM.Spinner1.

5、Enabled=.F.THIS.Enabled=.F.编写计时器Timer1的Timer事件代码:THISFORM.sec=THISFORM.sec1a0=THISFORM.sec&秒数IF a0=0 a1=INT(a0/60)&分钟数 a2=INT(a1/60)&小时数,教学进程,b0=IIF(a0%60 10,0+STR(a0%60,1),STR(a0%60,2)b1=IIF(a1%60 10,0+STR(a1%60,1),STR(a1%60,2)b2=IIF(a2%60 10,0+STR(a2%60,1),STR(a2%60,2)THISFORM.Text1.Value=ALLT(b2+

6、:+b1+:+b0)THISFORM.Spinner1.Value=a1ELSE THIS.Enabled=.F.THISFORM.Spinner1.Enabled=.T.ENDIF 运行程序,设置时间后按“开始”按钮,即开始倒计时,时间到时将弹出对话框。,图8-3 倒计时器,教学进程,数组属性,【例8-2】在例7-3(P124)中使用数组属性来存放方阵的元素。求出主对角线上元素之和以及方阵的最大元素。设计步骤如下:(1)添加自定义属性。A(5,5)(2)建立应用程序用户界面与设置属性。,(3)修改代码。清除表单的Load、UnLoad事件代码,并修改表单的Activate事件代码:FOR i

7、=1 TO 25 yes=1 DO WHILE yes=1 x=INT(RAND()*100)yes=0 FOR j=1 TO i 1,教学进程,IF x=VAL(THIS.a(j)yes=1&如与前面的元素相同,则返回到Do循环 EXIT ENDIF ENDFOR ENDDO THIS.a(i)=STR(x,3)ENDFORTHISFORM.Text1.Value=THISFORM.Text2.Value=修改“计算”按钮Command1的Click事件代码:s=0FOR I=1 TO 5 s=s+VAL(THISFORM.a(i,i)ENDFORTHISFORM.Text1.Value=s

8、,教学进程,修改“计算”按钮Command1的Click事件代码:s=0FOR I=1 TO 5 s=s+VAL(THISFORM.a(i,i)ENDFORTHISFORM.Text1.Value=smax=0FOR I=1 TO 5 FOR j=1 TO 5 IF max VAL(THISFORM.a(i,j)max=VAL(THISFORM.a(i,j)p=i q=j ENDIF ENDFORENDFORTHISFORM.Text2.Value=A(+STR(p,1)+,+STR(q,1)+)=+STR(max,3)Command2的Click事件代码不变。,教学进程,【例8-3】使用微调

9、器控制色彩,还可以返回色彩的RGB值 设计步骤如下:(1)添加自定义属性,SPI(3),存放微调器对象。(2)建立应用程序用户界面。选择新建表单,进入表单设计器,首先增加一个命令按钮Command1、一个形状控件Shape1和一个容器控件Container1,并在Shape1上覆盖一个标签控件Label1。然后用鼠标右键单击容器控件,在弹出的快捷菜单中选择“编辑”,进入容器控件的编辑状态(四周出现浅绿色边界)。在容器中增加两个文本框Text1、Text2和三个微调器Spinner1、Spinner2、Spinner3(如图7-7所示)。,图7-6 调色盘,图7-7 设计表单界面,教学进程,(3

10、)设置对象属性。(4)编写程序代码。编写表单的Init事件代码,建立属性数组对对象变量的引用:编写Spanner1的InteractiveChange事件代码:r=THISFORM.spi(1).Valueg=THISFORM.spi(2).Valueb=THISFORM.spi(3).ValueTHIS.Parent.Text2.BackColor=RGB(r,g,b)THIS.Parent.Text1.Value=;Color=RGB(+STR(r,3)+,+STR(g,3)+,+STR(b,3)+),教学进程,编写Spanner2的InteractiveChange事件代码:r=THIS

11、FORM.spi(1).Valueg=THISFORM.spi(2).Valueb=THISFORM.spi(3).ValueTHIS.Parent.Text2.BackColor=RGB(r,g,b)THIS.Parent.Text1.Value=;Color=RGB(+STR(r,3)+,+STR(g,3)+,+STR(b,3)+)“编写Spanner3的InteractiveChange事件代码:r=THISFORM.spi(1).Valueg=THISFORM.spi(2).Valueb=THISFORM.spi(3).ValueTHIS.Parent.Text2.BackColor=

12、RGB(r,g,b)THIS.Parent.Text1.Value=;Color=RGB(+STR(r,3)+,+STR(g,3)+,+STR(b,3)+),8.2.1 自定义方法的概念1.子程序将重复使用的程序设计成能够完成一定功能的、可供其他程序使用(调用)的独立程序段。这种程序段称为子程序,它独立存在,但可以被多次调用,调用的程序称为主程序。子程序的输入输出,应根据实际情况灵活掌握,一般表现为主程序与子程序间的数据传递。,8.2.1 自定义方法的概念,2.过程、函数与方法,2.过程、函数与方法VFP子程序的结构分为过程、函数与方法三类。过程与函数的区别在于:函数(RETURN语句)返回一

13、个值而过程不返回值。方法是VFP中的一个新式的程序组装方式限制在一个对象中的子程序。“方法”可以像过程那样以传值或传址的方式传递参数,也可以像函数那样返回值,集中了过程和函数的所有功能与优点。与过程、函数的不同在于方法总是和一个对象密切相联,即仅当对象存在并且可见时方法才能被访问。VFP的方法分为两类:内部方法和用户自定义方法。内部方法是VFP预制的子程序,可供用户直接调用或修改后使用,如Release、SetAll、SetFocus等方法。VFP提供了数10种内部方法,并且允许用户使用自定义的方法。用户自定义方法其实就是用户为某种需要所编写的子程序。,教学进程,8.2 自定义方法,自定义方法

14、的概念,自定义方法的建立与调用,自定义方法的建立分为两步:方法的定义和编写方法代码。而自定义方法的调用则要指明调用的路径。方法的命名遵循下列VFP中名称的使用原则:(1)只能使用字母、汉字、下划线和数字。(2)使用字母、汉字或下划线作为名称的开头。(3)名称可以是1至128个字符。(4)避免使用VFP的保留字。另外还要注意,方法名不要与变量、数组名称相同,尽量取有意义的名称。,教学进程,【例8-4】在例8-3中使用自定义方法来统一处理微调器的操作。在例8-3的基础上进行修改,具体步骤如下:,(1)添加新方法。进入表单设计器,单击系统主菜单中“表单”项,在下拉菜单中选择“新方法程序”,打开“新建

15、方法程序”对话框。,图8-6 打开“新建方法程序”对话框,图7-9 自定义的新方法,单击“添加”按钮后再单击“关闭”按钮,退出新建方法程序对话框。此时,在属性窗口的“方法程序”选项卡中可以看见新建的方法及其说明。,教学进程,(2)编写自定义方法的代码。编写自定义方法的代码与编写表单的事件过程代码一样,可以双击属性窗口的新方法项SpiCh,或直接打开“代码”窗口,在“过程”下拉列表中选择新方法SpiCh,即可开始编写新方法的代码(图7-10):r=THISFORM.spi(1).Valueg=THISFORM.spi(2).Valueb=THISFORM.spi(3).ValueTHIS.Con

16、tainer1.Text2.BackColor=RGB(r,g,b)THIS.Container1.Text1.Value=Color=RGB(+STR(r,3)+,+STR(g,3)+,+STR(b,3)+),编写自定义方法的代码,教学进程,(3)自定义方法的调用。自定义方法的调用与表单的内部方法的调用一样,可以在事件过程或其他的方法代码中调用。修改Spanner1的InteractiveChange事件代码:THISFORM.spich 修改Spanner2的InteractiveChange事件代码:THISFORM.spich 修改Spanner3的InteractiveChange事

17、件代码:THISFORM.spich 表单的运行结果与例8-3完全相同。,教学进程,参数的传递与方法的返回值,1.参数的传递 若想使方法能够接收参数,只需在方法代码的开始增加命令行:PARAMETERS 形参表或LPARAMETERS 形参表 调用时使用括号将实参括起:对象名.方法名(实参表),说明:,LPARAMETERS与PARAMETERS的区别在于:PARAMETERS命令所接收的参数变量属于PRIVATE(专用)性质,LPARAMETERS命令所接收的参数变量属于LOCAL(局部)性质。实参表中实际参数的个数最多不能超过27个。若形参表中形参的个数多于实际参数的个数,则多余的形参变量

18、的值为.F.。若实际参数的个数多于形参表中形参的个数,则出现“程序错误”提示:必须指定额外参数。形参表实际参数&多余的形参变量的值为.F.实际参数 形参表&“程序错误”在调用方法时,无论指定或不指定实际参数方法名后都可以带一对括号。实参表中的实际参数可以是任何类型的变量、函数、数组、表达式,甚至是对象。例:浏览数据表,教学进程,【例8-5】在一个窗口中包含3个命令按钮,当用户单击其中一个时,要求其他个别按钮不能使用:,教学进程,设计步骤如下:应用程序用户界面的建立与对象属性的设置参见图8-10,下面介绍代码的编写。(1)添加新方法。进入表单设计器,单击系统主菜单中“表单”项,在下拉菜单中选择“

19、新方法程序”,打开“新建方法程序”对话框。在“名称”栏中填入自定义方法的名称:CmdClk,单击“添加”按钮后再单击“关闭”按钮,退出新建方法程序对话框。此时,在属性窗口的“方法程序”选项卡中可以看见新建的方法。,教学进程,(2)编写自定义方法CmdClk的代码:LPARAMETERS xDO CASE CASE x=THIS.Command1 THIS.Command2.Enabled=.F.CASE x=THIS.Command2 THIS.Command1.Enabled=.F.CASE x=THIS.Command3 THIS.Command1.Enabled=.T.THIS.Comm

20、and2.Enabled=.T.ENDCASE(3)三个命令按钮的Click事件代码完全相同:THISFORM.cmdclk(THIS)说明:要注意在不同代码中THIS所代表的不同对象。,教学进程,2.参数传递的方式,参数传递的方式分为传址方式和传值方式。,传址方式是指主程序将实际参数在内存中的地址传给被调用的方法,由形式参数接收,而形式参数也使用该地址。即实际参数与形式参数使用相同的内存地址,形式参数的内容一经改变,实际参数的内容也将跟着改变。传值方式是指主程序将实际参数的一个备份传给被调用的方法,这个备份可以被方法改变,但在主程序中变量的原值不会改变。在默认的情况下,VFP在调用方法时采用

21、传值方式。如果要改变参数的传递方式,可以采用以下两种方法:(1)使用SET UDFPARMS TO VALUE|REFERENCE命令来强制改变参数的传递方式。(2)使用符号来强制VFP使用传址的参数传递方式。,教学进程,【例8-6】编写求最大公约数的自定义方法,输入的两个整数按值传递,求出的最大公约数按地址传递。设计步骤如下:应用程序用户界面的建立与对象属性的设置参见图7-13,下面介绍代码的编写:,图7-13 求最大公约数,(1)首先添加自定义方法Hcf。,(2)编写自定义方法Hcf的代码:PARAMETERS m,n,ZIF m n t=m m=n n=tENDIFr=m%n,教学进程,

22、DO WHILE r 0 m=n n=r r=m%nENDDOZ=n&将求出的最大公约数赋值给变量Z(3)编写“计算”按钮的Click事件代码,调用自定义方法Hcf:x=VAL(THISFORM.Text1.Value)y=VAL(THISFORM.Text2.Value)a=0IF x*y0 THISFORM.hcf(x,y,a)&变量a按传址方式传递 THISFORM.Label2.Caption=两数的最大公约是:+ALLT(STR(a)ENDIF例题:数据传递.prg(调用过程时参数的传递),教学进程,3.方法的返回值 若想使方法能够返回一个值,只需在方法代码的结束处增加命令行:RET

23、URN 表达式 如果缺省表达式,VFP将自动返回.T.。当代码执行到RETURN命令,就会立即返回到主程序中。在主程序中可用以下形式调用方法:(1)在表达式中调用方法。如:k=PI()*THISFORM.Demo(r)(2)在赋值语句中调用方法。如:k=THISFORM.Demo(r)(3)以等号命令调用方法。如:=THISFORM.Demo(r)注:以等号命令调用方法将舍弃返回值。,教学进程,【例8-7】改写例8-6中的自定义方法,使其能够返回值。然后通过在表达式中调用方法,得到三个整数的最大公约数。设计步骤如下:应用程序用户界面的建立与对象属性的设置参见图7-14,下面介绍代码的编写:,图

24、7-14 求最大公约数,(1)首先添加自定义方法Hcf。,教学进程,(2)编写自定义方法Hcf的代码:PARAMETERS m,nIF m 0 m=n n=r r=m%nENDDORETURN n&将求出的最大公约数返回,教学进程,(3)编写“计算”按钮的Click事件代码,调用自定义方法Hcf:x=VAL(THISFORM.Text1.Value)y=VAL(THISFORM.Text2.Value)z=VAL(THISFORM.Text3.Value)IF x*y*z 0 a=THISFORM.hcf(x,y)b=THISFORM.hcf(a,z)THISFORM.Label2.Capti

25、on=3个数的最大公约数是:+ALLT(STR(b)ENDIF,教学进程,【例8-】计算组合数的程序。在表单中,利用微调器选择参数,然后按等号按钮即可得到所需的组合数(如图)。设计步骤如下:(1)应用程序用户界面的建立参见图。(2)属性的设置。,(3)代码的编写:首先在表单中增加一个计算阶乘的自定义方法Fact(),其代码为:PARAMETER K P=1 FOR I=1 TO K P=P*I ENDFOR RETURN P,编写命令按钮“=”的Click事件代码:M=VAL(THISFORM.TExt1.VALUE)N=VAL(THISFORM.TExt2.VALUE)IF M*N 0THISFORM.TEXT3.VALUE=THISFORM.FACT(M)/;THISFORM.FACT(N)/THISFORM.FACT(M-N)ENDIF这里用到计算组合数的公式:,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号