vb自定义函数_第1页
vb自定义函数_第2页
vb自定义函数_第3页
vb自定义函数_第4页
vb自定义函数_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第43讲过程和令定义因数VB应用程序是按模块化的方式组成的,一个程序模块是程序的一部分,每个模块负责解决整个应用问题的一部分任务。程序模块分为过程和函数两种。过程强调的是动作,而函数强调的是值的计算。1、过程可以将程序划分成一个个较小的逻辑单元,每个这样的逻辑单元可以构成一个过程。过程中的代码可以被重复地调用,从而避免了不必要的代码的重复编制,减少了编程的工作量。过程可以分成两类:一类是事件处理过程,另一类是通用过程。事件处理过程描述的是,当对象X上发生某个事件Y时,需要执行一段程序來响应这个事件;某个事件Y(如:Click点击)通用过程而通用过程则是一个独立的程序段,不同的事件可能需要使用

2、同一个程序段时,可以把这个程序段单独地建立成一个通用过程,供其他事件处理过程或其他通用过程调用。在本书中,我们只关心事件处理过程。2.函数实际上,函数也是一个程序模块,与过程相比,不同之处是函数执行完成后,函数的计算结果(称为“函数返回值”)被送到函数的调用点(即调用该函数的程序位置)上,供程序的后继部分继续进行处理,而过程是没有返回值的。一、事件处理过程P83可以按下面的方式构造一个事件处理过程:Sub事件处理过程名(参数表)语句块EndSub这里,事件处理过程名必须符合下面的规则:对象名_事件的标准名例如,在VB编程窗口中,建立一个“命令”对象如下:F1ia:SubCommand_Clic

3、k()语句块EndSub贝lj:对象夕i_事件的标准夕i是Command_Click,而Click表示鼠标点击执行语句块;X_Y乂例如:设Textl是一个文本框对象,一般我们用于输入、输出数据,但双击Textl文本框对象,进入编程状态如下:FmSubTextl_Change()语句块EndSubChange是改变、变化的意思,用于输入、输出数据的改变,如果要写一个事件处理过程,处理用户单击该文本框这样的事件,则该事件处理过程的名称必须是:Textl_Click(演示:在程序代码窗II顶部栏有对彖名事件框,可改选对象名和事件标准名,如:把Change改选为Click,可鼠标点击执行语句块)表4.

4、4.1VB的一些常用对象上的常见事件的标准名如下:对象事件的标准名说明文本框TextClick在文本框内单击鼠标DblClick在文本框内双击鼠标KeyPress文本框被激活后,用户在键盘上按下了某一个键命令按钮CommandClick在命令按钮上单击鼠标DblCKck在命令按钮上双击鼠标标签LabelKeyPress在标签上单击鼠标如果应用程序必须关心对彖X上发生的事件Y,就应编写一个事件处理过程X_Y,按照设计好的算法来处理这个事件;否则,这样的事件将由VB按照标准的方式自动地进行处理。例如,用鼠标拖动滚动条,列表框就会显示文本的不同部分。本章以后的人部分应用程序实例中,我们将把应用问题的

5、计算过程,放在命令按钮上发生单击鼠标事件的事件处理过程中。这是因为,当用户在某些文本框内输入了必要的原始数据之后,应用程序的计算才能进行。数据输入是否完成,必须要由用户来通知应用程序,常规的做法是在应用程序的窗体上,安排一个字面为“计算”或“开始”的命令按钮,一旦用户的数据输入完成后,就可用鼠标单击该命令按钮,它意味着这个事件的发生.应用程序已经具备了开始计算的必要条件,能够启动执行整个计算过程了。例1:上节课的求计算一元二次方程ax+bx+c二0的实数根的程序,程序界面要求见课本P77,程序清单见:一元二次方程.FRM,其中程序的输出部分代码为:Ifk=0ThenLabel6.Caption

6、=无解!字符串无解!显示在标签6的属性名Caption;Text4Text二Text5.Text二Textd.BackColor=vbBlue:Text5.BackColor=&HFF0000蓝色的16进制码Else底色属性名:BackColorLabel6Caption=k系统符号常量(蓝色)vbBlue二&HFF0000(蓝色的16进制码)Textd.Text=XIText5.Text=X2EndIf演示:本应用程序窗体中使用对象属性值的设置:另外,我给大家提一下全局变量的概念,例如:有卜面是课本P87的应用程序的代码结构如F:#01Dimd(lTo500)AsDouble#02Dimnc

7、AsInteger#03SubCommandl.Click0#04DimsumAsDouble#05DimiAsInteger定义数组变量d(lTo500)供下面3个子程序公用;定义简单变量nc供下面3个子程序公用;这样的1(1To500)和nc称为全局变量sum、i是子程序Commandl.Click0的局部变量:#15EndSub#16SubTextl.CliekODimsumAsInteger这里的sum因为是局部变屋,和上面子程序的sumnJ以是无关的:#19nc=10如果是全局变量nc,在子程序Textl_Cliek()中就不要再定义了;#20EndSub#21SubTextl_Ke

8、yPressf(KeyAsciiAsInteger)#24nc二nc+1这里的全局变量nc在各个子程序中是同一个变量;#25d(nc)=Val(Textl.Text)#31EndSubd(lTo500)由500个双精度实数类型的元素构成的数组变量,用来存储用户的输入数据。nc计数器,用来记录用户已经输入的数据的个数。这两个变量是在事件处理过程的外部说明的,这样的变量被称为“全局的”(Global)变量,在所有的事件处理过程中,都可以使用这些全局变量。二、函数P88-89虽然VB提供了常用的标准函数P71,可以使用这些标准函数来实现某些数学计算或数据类型的转换,但许多应用程序常常需要自己来定义函

9、数,以实现某种特定的计算。可以按下面的方式自己来构造(规定)一个函数:Function函数名(参数表)As数据类型名 讲解:课木P77(实践体验)的求一元二次方程根的程序(注意:对象屈性名如何选择?)语句块EndFunction这里,函数名是程序设计者为函数指定的名称。参数表是对于函数需要的原始数据的类型一一地进行说明。As后的类型名,是说明函数的计算结果,即函数返回值的数据类型,函数计算完成后,VB自动地把函数返回值送到函数的调用点上,这样,程序的其他部分能对这个结果作进一步的处理,最终完成计算任务。例20设计一个函数Leap,判断y年是否是闰年,若是,就返回1,否则,就返回0。我们先构造一

10、个函数Leap(Y):判断y年是否是闰年方法见课本P74的问题和练习第3题:FunctionLeap(yASInteger)AsIntegerIfymod100=0ThenFod是求余数运算符,例:8mod5=3,见课本P72表421Ifymod400=0ThenLeap=lElseLeap二0ElseIfymod4=0ThenLeap=lElseLeap二0EndlfEndFunctionEndFunction之前的语句块,描述了函数的计算过程,在这些语句中,至少要有一个形如函数名二表达式例如:上函数模块中的Leap二1、Leap二0的语句,这样,表达式的计算结果才能作为函数的返回值,被VB

11、送到函数的调用点上。把“判断y年是否是闰年”这样一个计算过程从整个应用程序中分离出来,成为一个独立的模块(模块可以是一个函数,也可以是一个过程),这是一种模块化的程序设计方法。使用这种方法的好处是:在设计(构造)这个模块时,需要处理的计算任务比起整个应用程序来相对地要简单些,例如,在这里需要设计的计算过程仅仅是按一定的规则判断y年是否是闰年,并按规定返回0或1这两个结果之一,而不需要考虑数据y是怎么获得的,y年是闰年要进行怎样的处理,y年不是闰年又要进行怎样的处理等问题,这些是应用程序其他部分的任务。构造了一个程序模块后,在程序的各个部分中可以使用这个模块。可自定义一个函数:Leap(y)=丫

12、不是闰年;丫是闰年;则:D2=D2+Leap(2012)“上面我们已经构造一个函数Leap(Y)例如:下面我们要要编制一个完整的程序,输入一个年份y(设y=1900),输出该年2月份的天数:分析如下:厂28丁不是闰年;2月份的天数:D2=-29了是闰年:可先设D2=28,则:IFy是闰年thenD2=D2+1 # #因此,输出该年2月份的天数的子程序如下:SubCommand1_C1ick0讲解:课木P77(实践体验)的求一元二次方程根的程序(注意:对象屈性名如何选择?) DimyAsIntegerDimnAsStringn=InputBoxC请输入年份:)y=Vai(n)d2二28d2=d24-Leap(y)调用函数Leap(y),并把的返回值1或0,被VB送到函数的调用点Textl.Text=d2EndSub演示:把上子程序模块和构造的函数Leap(Y)程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论