VB程序设计08课件_第1页
VB程序设计08课件_第2页
VB程序设计08课件_第3页
VB程序设计08课件_第4页
VB程序设计08课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第8章过程 过程是用来执行一个特定任务的一段程序代码。VB应用程序(又称工程或项目)由若干过程组成,这些过程保存在文件中,每个文件的内容通常称为一个模块。 在程序设计过程中,将一些常用的功能编写成过程,可供多个不同的事件过程多次调用,从而可以减少重复编写代码的工作量,实现代码重用,使程序简练、便于调试和维护。在VB6.0中,用户自定义过程分为:以“Sub”保留字开始的子过程、以“Function”保留字开始的函数过程、以“Property”保留字开始的属性过程、以“Event”保留字开始的事件过程。 本章主要介绍用户自定义的子过程和函数过程。退出8.1子过程8.2函数过程8.3参数传递8.4过程与变量的作用域8.5鼠标事件和键盘事件8.1子过程 子过程是用特定格式组织起来的一组代码,通常用来完成一个特定的功能,可以被其它过程作为一个整体来调用。8.1.1子过程的定义 定义子过程有以下两种方法。1.利用“工具”菜单下的“添加过程”命令定义8.1.2过程的调用 要执行一个过程,必须调用该过程。 子过程的调用有两种方式,一种是利用Call语句加以调用,另一种是把过程名作为一个语句来直接调用。1.用Call语句调用Sub过程 格式:Call过程名[(参数列表)] 例如:Callsum(a,b,c)2.把过程名作为一个语句来使用 格式:过程名[参数列表] 与第一种调用方法相比,这种调用方式省略了关键字Call,去掉了“参数列表”的括号。 例如:suma,b,c

【例8.2】编一个求n!的子过程,然后调用它计算7!+11!-10!。 程序如下:Subjch(n%,p&)Dimi%p=1Fori=1Tonp=p*iNextiEndSub

PrivateSubForm_Click()Dima&,b&,c&,d&Calljch(7,a)Calljch(11,b)Calljch(10,c)d=a+b-cPrint"7!+11!-10!=";dEndSub2.利用代码窗口直接定义 在窗体或标准模块的代码窗口把插入点放在所有现有过程之外,键入Function函数名即可。定义形式如下: [Static][Public|Private]Function函数名([参数列表])[As类型][局部变量或常数定义][语句序列][ExitFunction][语句序列]函数名=表达式EndFunction8.2.2函数的调用 调用函数过程可以由函数名带回一个值给调用程序,被调用的函数必须作为表达式或表达式中的一部分,再与其它的语法成分一起配合使用。因此,与子过程的调用方式不同,函数不能作为单独的语句加以调用。 最简单的情况就是在赋值语句中调用函数过程,其形式为: 变量名=函数过程名([参数列表])【例8.3】用函数过程实现对例8-2的求解。程序如下:Functionjch&(n%)Dimi%jch=1Fori=1Tonjch=jch*iNextiEndFunction

8.3参数传递 在调用过程时,一般主调过程与被调过程之间有数据传递,即将主调过程的实参传递给被调过程的形参,完成实参与形参的结合,然后执行被调过程体。在VB中,实参与形参的结合有两种方法:传址和传值。传址是默认的方法。两种结合方法的区分标志是“ByVal”,形参前加“ByVal”关键字时是传值,否则为传址。本章前面的举例,例8.4是传值,其余均为传址。8.3.1传值 传值的参数传递过程是:当调用一个过程时,系统将实参的值复制给形参,之后实参与形参便断开了联系。被调过程对形参的操作是在形参自己的存储单元中进行,当过程调用结束时,这些形参所占用的存储单元也同时被释放。因此在过程中对形参的任何操作都不会影响到实参。8.3.2传址 传址的参数传递过程是:当调用一个过程时,它将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,因此实参的值就会随形参的改变而改变。当参数是字符串或数组时,使用传址传递直接将实参的地址传递给过程,会使程序的效率提高。 【例8.7】用数组作参数,求一维数组中的所有负元素之和。 程序如下:Functionsum%(b%())Dimi%Fori=LBound(b)ToUBound(b)Ifb(i)<0Thensum=sum+b(i)EndIfNextiEndFunction

PrivateSubForm_Click()Dima%(10),s%,i%Fori=1To10a(i)=Int(Rnd*100)-50Printa(i);NextiPrints=sum(a())Print"数组中的负元素之和为:";sEndSub8.4过程与变量的作用域 应用程序中的过程、变量是有作用域的。所谓作用域,就是过程、变量可以在哪些地方被使用。作用域的大小和过程、变量所处的位置及定义方式有关。8.4.1过程的作用域 这里只讨论窗体和标准模块文件。 过程的作用域分为:窗体/模块级和全局级。8.4.2变量的作用域 变量的作用域决定了哪些子过程和函数过程可访问该变量。变量的作用域分为局部变量、窗体/模块级变量和全局变量。表8-2中列出了3种变量作用范围及使用规则。【例8.10】通过本例学习不同作用域变量的使用。在Form1窗体代码窗口输入如下程序:Privatea%'窗体/模块级变量PrivateSubForm_Click()Dimc%,s%'局部变量c=20s=a+Form2.b+c'引用各级变量Print"s=";sEndSub

在本例中,我们在Form1窗体的Click事件过程中引用了Form2窗体中定义的全局级变量b,由此可以看出在代码窗口“通用声明”段中用Public定义的变量确实是在整个应用程序中起作用的。 如果将Form1代码窗口中的Form_Click事件过程做如下变动:PrivateSubForm_Click()Dimc%,s%,b%'局部变量c=20b=40s=a+b+cPrint"s=";sEndSub运行结果变为:s=70 结果发生了变化。原因是在VB中,当同一应用程序中定义了不同级别的同名变量时,系统优先访问作用域小的变量。上例改动后,系统优先访问了局部变量b,因此结果当然也相应地改变了。如果想优先访问全局变量,则应在全局变量前加上窗体/模块名。PrivateSubForm_Click()Dimi%Fori=1To5Print"第"&i&"次结果为"&s()NextiEndSub8.5鼠标事件和键盘事件 鼠标对于Windows应用程序设计来说几乎是必需的,尤其是在图形图像处理的程序设计中,显得更为重要。而鼠标应用的基础是鼠标事件。下面我们就来简单介绍一下窗体鼠标事件及其应用。8.5.1鼠标事件 除了单击(Click)和双击(DblClick)外,基本的鼠标事件还有3个:MouseDown、 MouseUp和MouseMove。工具箱中的大多数控件都能响应这3个事件。MouseDown:鼠标的任一键被按下时触发该事件。MouseUp:鼠标的任一键被释放时触发该事件。MouseMove:鼠标被移动时触发该事件。以Form对象为例,它们的语法格式为:PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle) 【例8.12】显示鼠标指针的当前位置。 程序如下:PrivateSubForm_MouseMove(ButtonAsInteger,_ShiftAsInteger,XAsSingle,YAsSingle)Text1.Text=XText2.Text=YEndSub 运行结果如图8-6所示。8.5.2键盘事件 VB中的对象识别键盘事件,包括KeyPress、KeyUp和KeyDown事件。用户按下并且释放一个ANSI键时就会触发KeyPress事件;用户按下一个键时触发KeyDown事件,释放引发KeyUp事件。在引发键盘事件的同时,用户所按的键盘码作为实参传递给相应的事件过程,供程序判断识别用户的操作。 KeyPress只响应按下标准ASCII字符表中对应的键时的事件,如[Enter]QVFP、[Tab]键、[Backspace]键等以及标准键盘中的字母、标点、数字键等。而KeyDown和KeyUP则提供了最低级的键盘响应。 它们的格式如下: SubObject_KeyPress([IndexAsInteger,]KeyAsciiAsInteger) SubObject_KeyDown([IndexAsInteger,]KeyCodeAsInteger,ShiftAsInteger) SubObject_KeyUp([IndexAsInteger,]KeyCodeAsIn

温馨提示

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

评论

0/150

提交评论