函数过程.docx
- 文档编号:1085579
- 上传时间:2022-10-16
- 格式:DOCX
- 页数:21
- 大小:31.83KB
函数过程.docx
《函数过程.docx》由会员分享,可在线阅读,更多相关《函数过程.docx(21页珍藏版)》请在冰豆网上搜索。
函数过程
过程
本章要点
●子过程的概念和应用。
●函数过程的概念和应用。
●过程的参数传递:
传值与传址;对象参数。
●标准模块与SubMain过程的应用。
●常用的键盘和鼠标事件过程。
在VisualBasic6.0中,常用的过程主要有两类:
一类由系统提供,包括事件过程和内部函数过程,这是我们在前面的章节中多次使用的过程;另一类是自定义过程,由程序设计者根据需要自行编制,主要包括通用过程和自定义函数过程。
事件过程和通用过程合称为子过程(Sub过程),自定义函数过程简称函数过程(Function过程)。
使用过程是体现结构化(模块化)程序设计思想的重要手段。
当问题比较复杂时,可根据功能将程序分解为若干个小模块。
若程序中有多处使用相同的代码段,也可以将其编写为一个过程,程序中的其他部分可以调用这些过程,而无须重新编写代码。
过程的应用大大提高了代码的可复用性,简化了编程任务,并使程序更具可读性。
运用过程还可以把大的程序分成相对独立的子程序,便于调试和维护。
8.1子过程
子过程即Sub过程,VB中的子过程分为事件过程和通用过程两类。
事件过程:
当发生某个事件时,对该事件做出响应的程序段,它是VB应用程序的主体。
窗体的事件过程名称为:
Form_事件名,如Form_Click。
控件的事件过程名称为:
控件名_事件名,如Command1_Click。
通用过程:
有时多个不同的事件过程可能要使用同一段程序代码,这时可将这段程序代码独立出来,编写为一个共用的过程,称为通用过程。
它独立于事件过程之外,可供其他事件过程、通用过程或函数过程调用。
8.1.1通用过程的定义
1.通用过程的语法格式
通用过程的语法格式如下:
[Public|Private][Static]Sub过程名([形参表])
[局部变量或常数声明]
[语句块]
[ExitSub]
[语句块]
EndSub
说明:
(1)[Public|Private]:
可选。
指定过程的作用范围。
若省略,则默认为Public(全局)。
(2)Static:
可选。
指定本过程内的所有局部变量均为静态变量。
(3)过程名:
命名规则与变量命名规则相同。
无参数时,过程名后的括号不能省略。
(4)形参表:
形参表类似于变量声明,指明本过程被调用时传送给本过程的变量个数和类型。
若有多个变量,各变量之间用逗号间隔。
形参表中出现的参数称为形式参数,简称形参。
每个形参的格式为:
[ByVal|ByRef]形参名[()][As类型]
ByVal表示该参数按值传递,ByRef表示该参数按地址传递(默认)。
形参名必须是合法的变量名或数组名(后面加括号)。
类型代表该参数的数据类型,默认为Variant。
不能用定长字符串变量或定长字符串数组作为形式参数,但是可以在调用过程时用简单定长字符串变量作为“实际参数”,VB将其转换为变长字符串变量传递给过程。
(5)ExitSub语句表示立即退出子过程,通常将其置于选择结构中。
(6)在过程内不能再定义过程,但可以调用其他过程。
2.通用过程的创建
创建通用过程有两种方法:
使用“添加过程”对话框;直接在代码编辑器窗口中输入过程代码。
(1)使用“添加过程”对话框
步骤如下:
①打开要添加过程的代码编辑器窗口。
②执行【工具】菜单【添加过程】命令,打开如132页图8.1所示的【添加过程】对话框。
③在【名称】文本框中输入过程名。
在【类型】框架中选择过程类型,其中【子程序】表示建立Sub过程,【函数】表示建立Function过程。
在【范围】框架中选择范围,相当于使用Public或Private关键字。
④单击【确定】按钮后,在代码编辑器窗口中将出现如132页图8.2所示的过程模板。
(2)直接在代码编辑器窗口中输入
在代码编辑器窗口中,将插入点放在已有过程的外面,按照规定的语法格式输入过程名和参数,系统会自动产生最后一行语句EndSub。
8.1.2子过程的调用
子过程的Sub与EndSub之间的语句序列称为过程体,每次调用子过程都会执行过程体中的语句。
在程序中,既可以调用通用过程,也可以调用事件过程。
1.调用通用过程
调用子过程有两种方法:
使用Call语句;直接使用过程名。
语法格式如下:
Call过程名[(实参表)]
或者:
过程名[实参表]
说明:
(1)实参表是实际参数(简称实参)列表,若有多个参数,参数之间要用逗号间隔。
各实参与形参在参数列表中的位置相互对应,实参与对应位置的形参必须是同一类型,可以是常数、变量、数组元素或表达式。
(2)当用Call语句调用子过程时,若有参数,则参数必须放在圆括号内;若无参数,则省略过程名后的圆括号。
(3)若不使用Call关键字,则过程名后不能加括号。
若有参数,则参数直接跟在过程名之后,参数与过程名之间用空格间隔,参数与参数之间用逗号间隔。
【例8.1】编写一个计算圆面积和周长的通用过程。
在窗体的单击事件中通过InputBox函数输入圆的半径,然后调用该过程计算圆面积和周长,计算结果通过消息对话框输出。
程序运行结果如133页图8.2所示。
代码如下:
'计算圆面积和周长的通用过程,三个形参rr、ss、pp分别为半径、面积和周长。
'其中rr为输入参数,ss和pp为输出参数。
PublicSubCirAreaPeri(rrAsSingle,ssAsSingle,ppAsSingle)
ConstPI=3.14159'声明过程内局部常数
ss=PI*rr*rr'计算圆面积
pp=PI*rr*2'计算圆周长
EndSub
'窗体的单击事件过程
PrivateSubForm_Click()
DimrAsSingle,sAsSingle,pAsSingle'声明变量
r=Val(InputBox("请输入圆的半径(cm):
","输入半径"))'获取半径r
'调用通用过程CirAreaPeri。
三个实参r、s、p分别与该过程的三个形参对应。
'实参r向过程传送半径,执行通用过程后,计算所得圆面积和周长分别被赋值给s、p。
CallCirAreaPeri(r,s,p)'另一种调用形式为:
CirAreaPerir,s,p
MsgBox"圆的半径为:
"&r&"厘米"&vbCr_
&"圆的面积为:
"&s&"平方厘米"&vbCr_
&"圆的周长为:
"&p&"厘米",,"圆面积与周长"
EndSub
【例8.2】创建一个简单的文本编辑程序,利用通用过程控制用于编辑操作的命令按钮的有效状态(Enabled属性)。
运行界面如134页图8.3所示。
左图为选定文本后的状态,右图为单击“复制”按钮后的状态。
在窗体上放置一个文本框,名称为txtEdit,设其Text属性为空,MultiLine属性为True,ScrollBars属性为2。
添加三个命令按钮,名称分别为cmdCut、cmdCopy和cmdPaste,设Caption属性均为空,Enabled属性均为False,Style属性均为1(图形),通过Picture属性为它们各设置一幅图片,设ToolTipText(工具提示文本)属性分别为“剪切”、“复制”和“粘贴”。
再添加一个命令按钮cmdExit,设其Caption属性为“退出”。
编程思路:
编制一个通用过程CtlEnabled(blnEnAsBoolean),形参blnEn为逻辑型。
由于控件的Enabled属性也是逻辑型,因此在程序运行时,根据用户的不同操作,将实参设为True或False,传递给通用过程,即可控制各编辑按钮的Enabled属性。
程序代码如下:
OptionExplicit
DimstrSAsString'窗体级变量用于存放复制或剪切的内容
'控制按钮有效状态的通用过程,形参blnEn为逻辑型。
PrivateSubCtlEnabled(blnEnAsBoolean)
cmdCut.Enabled=blnEn'剪切、复制按钮的Enabled属性值与形参值一致
cmdCopy.Enabled=blnEn
cmdPaste.Enabled=NotblnEn'粘贴按钮的Enabled属性值与形参值相反
EndSub
PrivateSubcmdCopy_Click()'单击“复制”按钮
strS=txtEdit.SelText'将选中的内容存入变量
CallCtlEnabled(False)'调用通用过程,改变按钮的有效状态
EndSub
PrivateSubcmdCut_Click()'单击“剪切”按钮
strS=txtEdit.SelText'将选中的内容存入变量
txtEdit.SelText=""'清除选定内容实现剪切
CallCtlEnabled(False)'调用通用过程,改变按钮的有效状态
EndSub
PrivateSubcmdPaste_Click()'单击“粘贴”按钮
txtEdit.SelText=strS'将变量中的内容赋予SelText实现粘贴
EndSub
PrivateSubcmdExit_Click()'单击“退出”按钮
End
EndSub
'鼠标在文本框内移动时触发MouseMove事件
PrivateSubtxtEdit_MouseMove(ButtonAsInteger,_
ShiftAsInteger,XAsSingle,YAsSingle)
IftxtEdit.SelText<>""Then'若有文本被选定
CallCtlEnabled(True)'调用通用过程,使剪切、复制按钮有效
Else'否则
CallCtlEnabled(False)'调用通用过程,使剪切、复制按钮无效
EndIf
cmdPaste.Enabled=CBool(Len(strS))'若变量strS不为空,则粘贴按钮有效
EndSub
在本例中,通用过程CtlEnabled被调用了多次,显然,过程的应用提高了代码的可复用性。
上述代码中涉及到的MouseMove事件将在8.5节介绍。
2.调用事件过程
在程序中不仅可以调用通用过程,也可以调用事件过程,二者的语法格式相同。
例如:
Form_Load'执行窗体加载事件过程中的语句。
或:
CallForm_Load
cmdAdd_Click'调用命令按钮cmdAdd的单击事件过程。
或:
CallcmdAdd_Click
调用事件过程实际上就是执行事件过程中的语句序列,如同通用过程一样,亦可起到复用和简化代码的作用。
需要注意的是,如果事件过程有参数,则调用时必须提供合法参数,这对初学者来说可能有一定困难。
8.2函数过程
尽管VB提供了许多内部函数(如Chr、Sqr、Time等)供程序设计者使用,但不可能完全满足应用程序设计的需要。
当在程序中需要多次用到某一公式或处理某一函数关系,而又没有现成的内部函数能够使用时,可以用Function语句编写自定义函数过程(Funtion过程)实现相应的功能。
在程序中可以像使用内部函数一样使用Function过程。
Function过程也是一个独立的过程,可读取参数、执行一系列语句并改变其参数的值,这一点与前面介绍的Sub过程相同。
Function过程与子过程不同的是:
子过程没有返回值,只能作为独立的基本语句被调用,不能出现在表达式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 过程