资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第8章 自定义属性与方法,8.1 自定义属性 8.2 自定义方法,8.1 自定义属性,8.1.1 添加自定义属性 按照以下步骤,可以在表单中添加一个自定义的属性Sec: 进入表单设计器,单击系统主菜单中“表单”项,在下拉菜单中选择“新建属性”(如图8-1),打开新建属性对话框。 在“名称(Name)”栏中填入自定义属性的名称Sec,然后在“说明”栏中填入该属性的简单说明:“记录初始秒数”(如图8-2左).说明内容非必需的,只是为了阅读程序方便。 单击“添加”按钮后再单击“关闭”按钮,退出“新建属性”对话框。此时,在属性窗口的“其他”选项卡中可以看见新建的属性及其说明,新定义属性的类型为逻辑型,值为:.F.,我们可以将它改为其他类型,如数值型值:0(如图8-2右)。,【例8-1】设计一个计时器,能够设置倒计时的时间,并进行倒计时。 设计步骤如下: 添加自定义属性。选择“新建”表单,进入表单设计器,首先在表单中添加一个自定义属性Sec,用以记录“秒表”的初始时间。 建立应用程序用户界面与设置属性。在表单中增加一个命令按钮Command1,一个文本框Text1,一个微调器Spinner1和一个计时器控件Timer1,如图8-3左所示。,其中,计时器控件Timer1可以放在表单的任何位置。 属性设置参见表8-1。, 编写代码。 编写微调器Spinner1的InteractiveChange事件代码: THISFORM.sec = THIS.Value * 60 a1 = THIS.Value a2 = 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 +“:00“,IF a1 0 THISFORM.Command1.Enabled = .T. ELSE THISFORM.Command1.Enabled = .F. ENDIF 编写命令按钮Command1的Click事件代码: THISFORM.Timer1.Enabled=.T. THISFORM.Spinner1.Enabled=.F. THIS.Enabled=.F. 编写计时器Timer1的Timer事件代码: THISFORM.sec=THISFORM.sec1 a0 = THISFORM.sec & 秒数 IF a0 1 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 +“:“ + b1 + “:“ + b0) THISFORM.Spinner1.Value = a1,ELSE THIS.Enabled=.F. MESSAGEBOX(“预定的时间到了!“,0,“倒计时“) THISFORM.Spinner1.Enabled=.T. ENDIF 运行程序,设置时间后按“开始”按钮,即开始倒计时,时间到时将弹出对话框(图8-3中、右)。,8.1.2 数组属性 数组属性是一组具有不同下标的同名属性,可以在任何使用数组的地方使用数组属性。,【例8-2】在例7-3中使用数组属性来存放方阵的元素。求出主对角线上元素之和以及方阵的最大元素。 设计步骤如下: 添加自定义属性。选择“新建”表单,进入表单设计器,首先在表单中添加一个自定义的数组属性A(5,5)。 建立应用程序用户界面与设置属性与例7-3基本相同。其中列表框List1的属性设置参见表8-2。, 修改代码。 清除表单的Load、UnLoad事件代码,并修改表单的Activate事件代码: FOR i = 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) ENDFOR THISFORM.Text1.Value = “ THISFORM.Text2.Value = “ THIS.List1.Refresh 修改“计算”按钮Command1的Click事件代码: s = 0 FOR I = 1 TO 5 s = s + VAL(THISFORM.a(i,i),ENDFOR THISFORM.Text1.Value = s max = 0 FOR 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 ENDFOR ENDFOR THISFORM.Text2.Value = “A(“ + STR(p,1) + “,“ + STR(q,1) + “)=“ + STR(max,3) Command2的Click事件代码不变。,设计步骤如下: 添加自定义属性。选择“新建”表单,进入表单设计器,首先在表单中添加一个自定义的数组属性Spi(3),用来存放微调器对象。 建立应用程序用户界面。选择新建表单,进入表单设计器,首先增加一个命令按钮Command1、一个形状控件Shape1和一个容器控件Container1,并在Shape1上覆盖一个标签控件Label1。然后用鼠标右键单击容器控件,在弹出的快捷菜单中选择“编辑”,进入容器控件的编辑状态(四周出现浅绿色边界)。在容器中增加两个文本框Text1、Text2和3个微调器Spinner1、Spinner2、Spinner3(如图8-5右所示)。 设置对象属性,见表8-3。,【例8-3】使用微调器控制色彩,还可以返回色彩的RGB值,如图8-5左所示。,按照以下步骤对容器中的控件设置属性:用鼠标右键单击Container1,在弹出的快捷菜单中选择“编辑”。容器的四周出现淡绿色边界,可以逐一选定其中的控件,并在属性窗口设置其属性,见表8-4。,4) 编写程序代码。 编写表单的Init事件代码,建立属性数组对对象变量的引用: THIS.spi(1) = THIS.Container1.Spinner1 THIS.spi(2) = THIS.Container1.Spinner2 THIS.spi(3) = THIS.Container1.Spinner3 编写Spanner1的InteractiveChange事件代码: r = THISFORM.spi(1).Value g = THISFORM.spi(2).Value b = THISFORM.spi(3).Value,THIS.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 = THISFORM.spi(1).Value g = THISFORM.spi(2).Value b = THISFORM.spi(3).Value THIS.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).Value g = THISFORM.spi(2).Value b = THISFORM.spi(3).Value THIS.Parent.Text2.BackColor = RGB(r,g,b) THIS.Parent.Text1.Value = ; “Color = RGB(“+STR(r,3)+“,“+STR(g,3)+“,“+STR(b,3)+“)“,8.2 自定义方法,8.2.1 自定义方法的概念 子程序 2. 过程、函数与方法 3. 自定义方法的建立与调用,【例8-4】在例8-3中使用自定义方法来统一处理微调器的操作。 在例8-3的基础上进行修改,具体步骤如下: 添加新方法。进入表单设计器,单击系统主菜单中“表单”项,在下拉菜单中选择“新方法程序”,打开“新建方法程序”对话框,如图8-6所示。,在“名称”栏中填入自定义方法的名称:SpiCh,然后在“说明”栏中填入新方法的简单说明:“自定义的新方法”(如图8-6右)。说明内容不是必需的,只是为了阅读程序方便。 单击“添加”按钮后再单击“关闭”按钮,退出新建方法程序对话框。此时,在属性窗口的“方法程序”选项卡中可以看见新建的方法及其说明(如图8-7)。, 编写自定义方法的代码。编写自定义方法的代码与编写表单的事件过程代码一样,可以双击属性窗口的新方法项SpiCh,或直接打开“代码”窗口,在“过程”下拉列表中选择新方法SpiCh,即可开始编写新方法的代码(图8-8):,r = THISFORM.spi(1).Value g = THISFORM.spi(2).Value b = THISFORM.spi(3).Value THIS.Container1.Text2.BackColor = RGB(r,g,b) THIS.Container1.Text1.Value = “Color = RGB(“+STR(r,3)+“,“+STR(g,3)+“,“+STR(b,3)+“)“, 自定义方法的调用。自定义方法的调用与表单的内部方法的调用一样,可以在事件过程或其他的方法代码中调用。 修改Spanner1的InteractiveChange事件代码: THISFORM.spich 修改Spanner2的InteractiveChange事件代码: THISFORM.spich 修改Spanner3的InteractiveChange事件代码: THISFORM.spich 表单的运行结果与例8-3完全相同。,8.2.2 参数的传递与方法的返回值 1. 参数的传递 若想使方法能够接收参数,只需在方法代码的开始增加命令行: PARAMETERS 形参表 或 LPARAMETERS 形参表 调用时使用括号将实参括起: 对象名.方法名(实参表),【例8-5】在一个窗口中包含3个命令按钮,当用户单击其中一个时,要求其他个别按钮不能使用: 分析:本例可以分别建立3个按钮的单击事件过程,也可以建立一个“方法”来统一处理3个命令按钮的单击事件。假设:单击Command1使Command2不可用;单击Command2使Command1不可用;单击Command3使得Command1和Command2都可用。 设计步骤如下: 应用程序用户界面的建立与对象属性的设置参见图8-10,下面介绍代码的编写。,【例8-6】编写求最大公约数的自定义方法,输入的两个整数按值传递,求出的最大公约数按地址传递。 设计步骤如下: 应用程序用户界面的
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号