版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
概述
过程:程序中的若干个相对独立的、能完成特定功能的逻辑部件。
过程的概念(了解):过程的分类:VisualBasic中使用的过程分为:子程序过程(SubProcedure)(特点:不返回值)
函数过程(FunctionProcedure)(特点:返回值)
属性过程(PropertyProcedure)引例:本章主要讨论的是sub过程和function过程7.1sub过程VB中有两种sub过程:事件过程和通用过程7.1.1事件过程1.窗体事件过程的定义(掌握)
PrivateSubForm_事件名([参数列表])
…EndSub注意:
1)窗体事件过程名由Form_事件名组成;
2)每个窗体事件过程名前都有一个Private的前缀,表示该事件过程不能在它自己的窗体模块之外被调用;
3)事件过程有无参数,完全由VB提供的具体事件本身决定,用户不可以随意添加。
2)窗体事件的执行顺序
回忆:窗体的常用事件有哪些?InitializeLoadActivateGotfocusInitialize:初始化,窗体被加载Load之前,窗体被配置的时候触发Load:加载,VB把窗体从磁盘或从磁盘缓冲区读入内存时发生Activate:激活,窗体已经被装入内存,变成被激活的窗体时触发gotFocus:当窗体成为当前焦点时触发(窗体上没有可以接收焦点的控件)几个事件的发生顺序(掌握)InitializeLoadActivategotFocus例:下面代码的执行结果是什么?(窗体上无控件)PrivateSubForm_Activate()Debug.Print3EndSubPrivateSubForm_GotFocus()Debug.Print4EndSubPrivateSubForm_Initialize()Debug.Print1EndSubPrivateSubForm_Load()Debug.Print2EndSub在立即窗口中输出1234注意:在form_initialize和form_load事件过程中通常编写初始化对象属性的语句;不能编写print和setfocus语句。3.定义控件事件过程口述程序
窗体上有3个命令按钮,6个文本框,分别编写事件过程,要求:当命令按钮时,实现2个文本框中数据的交换.
如果多个事件过程中需要执行相同或相似的功能,就得在事件过程中使用相同的程序段,这样会造成代码的重复,更不便于程序修改,此时,需要用到VB另一种过程:通用过程。7.1.2通用过程(重点)
定义:
用户自定义的,供程序多次调用的,具有某种功能的一段代码。例如:PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X:X=Y:Y=TempEndSub
通用过程有助于将复杂的应用程序分解成多个易于管理的逻辑单元,使应用程序更简洁、更易于维护。
通用过程分为公有(Public)过程和私有(Private)过程两种。公有过程可以被应用程序中的任一过程调用,而私有过程只能被同一模块中的过程调用。通用过程的作用和分类1、通用sub过程的定义格式(重点):
[Private|Public][Static]
Sub
过程名([参数列表])
[局部变量和常数声明]
语句块
[ExitSub]
语句块
EndSub说明1:1)Sub过程以Sub语句开头,结束于EndSub语句。这两个语句之间的语句块,称为子程序体或过程体。过程体过程名PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X:X=Y:Y=TempEndSub
以Private为前缀的Sub过程是模块级的过程,只能被本模块内的事件过程或其它过程调用。以Public为前缀的Sub过程是应用程序级的过程,在应用程序的任何模块中都可以调用它。缺省
Private|public选项,则系统默认值为Public。特别注意:一个窗体如果调用另一个窗体中的公有过程时,必须以窗体名.公有过程名的形式调用公有过程;例23)以Static为前缀的sub过程是模块级的,该过程中的局部变量为“静态”变量;(例3)
4)过程名的命名规则与变量命名规则相同,在同一个模块中,过程名必须唯一。过程名不能与模块级变量同名,也不能与调用该过程的程序中的局部变量同名。
5)(重点)参数列表中的参数称为形式参数,它可以是变量名或数组名;若变量名后无括号,则表示该形参是普通变量,否则是数组.PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X:X=Y:Y=TempEndSub形式参数,形参是变量说明:1、若有多个参数时,各参数之间用逗号分隔;说明2:通用过程可以没有参数,但一对圆括号不可以省略。不含参数的过程称为无参过程。StaticSubadd()DimtempAsIntegertemp=temp+1PrinttempEndSub说明3:形参格式为:
[ByVal]变量名[()][As
数据类型]ByVal:表明其后的形参是按值传递参数.
ByRef:表明其后的形参是按地址传递参数若形参前缺省ByVal和ByRef时,指的是按地址传递。PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X:X=Y:Y=TempEndSub
形参前省略关键字,表示参数是按地址传递的PrivateSubCommand1_Click()Dima%,b%a=Val(Text1.Text)b=Val(Text2.Text)CallSwap(a,b)Text1.Text=aText2.Text=bEndSub调用swap,a、b为实参
说明4:
as数据类型:说明形参表中形参的变量类型,实参最好和形参类型一致。注意:若形参变量类型是string,它只能是不定长字符。而对应的实参既可以是定长的字符串变量也可以是不定长的字符串变量。如果形参是字符串数组,则没有这个限制。例6)EndSub标志该过程的结束。当程序执行到EndSub语句时,退出该过程,并返回到调用该过程语句的下一条语句。PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsInteger
Temp=X:X=Y:Y=TempEndSub例如:编一个交换两个整型变量值的通用sub过程。PrivateSubCommand1_Click()Dima%,b%a=Val(Text1.Text)b=Val(Text2.Text)CallSwap(a,b)Text1.Text=aText2.Text=bEndSub7)过程中可以用ExitSub提前结束过程,程序执行到ExitSub语句时,提前退出该过程,返回到调用该过程语句的下一条语句。
PrivateSubSwap(XAsInteger,YAsInteger)
DimtempAsIntegerifx<0andy<0thenexitsub
Temp=X:X=Y:Y=TempEndSub(8)sub过程不能嵌套定义PrivateSubSwap(XAsInteger,YAsInteger)
StaticSubadd()DimtempAsIntegertemp=temp+1PrinttempEndSubDimtempAsIntegerifx<0andy<0thenexitsub
Temp=X:X=Y:Y=TempEndSub错误,过程嵌套定义2、建立通用Sub过程的方法方法一:
1)打开代码编辑器窗口
2)选择“工具”菜单中的“添加过程”
3)从对话框中输入过程名,并选择类型和范围
4)在新创建的过程中输入内容方法二:
1)在代码编辑器窗口的对象中选择“通用”,在文本编辑区输入PrivateSub过程名
2)按回车键,即可创建一个Sub过程样板
3)在新创建的过程中输入内容编写通用过程的标准步骤2.加头加尾1.写出主体算法3.提炼形参
Fori=1Ton-1Forj=1Ton-iIfs(j)>s(j+1)Thent=s(j)s(j)=s(j+1)s(j+1)=tEndIfNextjNexti形成冒泡法排序通用Sub过程的思维过程:PrivateSubBubble_Sort()EndSubn%,S()AsInteger1、写出冒泡法排序的算法2、为算法加头加尾(命名+形参)PrivateSubBubble_Sort(Sort()AsInteger)DimIAsInteger,TemAsIntegerFori=1toubound(sort)-1forj=1toubound(sort)-iIfSort(j)>Sort(j+1)ThenTem=Sort(j)Sort(j)=Sort(j+1)Sort(j+1)=TemEndIfNextjNextiEndSub3、优化形参,减少形参个数超链接到7.7节例7-8试一试:编写求任意正整数的所有因子(本身除外)的通用sub过程。PrivateSubfactor()DimiAsIntegerFori=1Ton-1IfnModi=0Thens=s&Str(i)NextiEndSubFori=1Ton-1IfnModi=0Thens=s&Str(i)NextinAsInteger,sAsString7.2Function过程Function过程定义[Privatel|Public][Static]Function
函数名([参数列表])[AS数据类型]
[局部变量和常数声明]
[语句块]
[函数名=表达式]
[ExitFunction]
[语句块]
[函数名=表达式]
EndFunction
说明:(1)Function过程应以Function语句开头,以EndFunction语句结束。中间是描述过程操作的语句,称为函数体或过程体。(2)函数名的命名规则和变量名的命名规则相同。(3)As数据类型,指定返回值的数据类型,缺省时,默认为变体类型。PublicFunctiontotal(a()AsInteger)AsLongDimiAsIntegerFori=1ToUBound(a) total=total+a(i)NextiEndFunction函数体函数的返回值类型为long函数名为total函数名=表达式(4)在函数体内通过“函数名=表达式”语句给函数赋值。如果缺省给函数名赋值的语句,则该Function函数过程返回对应类型的缺省值。比如,数值型函数返回0值,而字符串函数返回空字符串。PublicFunctiontotal(a()AsInteger)AsLongDimiAsIntegerFori=1ToUBound(a) sum=sum+a(i)NextiEndFunction(5)在函数体内可以含有多个ExitFunction语句,程序执行ExitFunction语句将退出Function过程,返回调用点。(6)在Function过程内部不得再定义Sub过程或Function过程,即不可嵌套定义。Function过程添加课堂练习:编写一个求阶乘的函数。PrivateFunctionFact(ByValNAsInteger)AsLong DimKAsIntegerFact=1
IfN=0OrN=1ThenExitFunction
Else
ForK=1toNFact=Fact*K
NextK
EndIfEndFunction函数名=表达式函数名=表达式7.3过程调用7.3.1事件过程的调用(自学)7.3.2调用sub过程7.3.3调用Function过程7.3.4调用其它模块中的公有过程7.3.2调用Sub过程Sub过程和function过程必须在事件过程或其他过程中显式调用,否则过程代码就永远不会被执行。在调用程序时,程序执行到调用某通用过程的语句后,系统就会将控制转移到被调用的过程。在被调用的过程中,从第一条sub或function语句开始,依次执行其中的所有语句,当执行到endsub或endfunction语句后,返回到主调程序的断点,并从断点处继续程序的执行。调用Sub过程流程主调程序
调用过程AEndSub过程AEndSub3.Sub子过程的调用(1)用Call语句调用Sub过程语法:Call过程名(实在参数表)
实在参数的个数、类型和顺序,应该与被调用过程的形式参数相匹配,有多个参数时,用逗号分隔。如果被调用的过程是一个无参过程,则括号可以省略.例:PrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text):b=Val(Text2.Text)Calladd(a,b)EndSubPrivateSubadd(xAsInteger,yAsInteger)s=x+yText3.Text=sEndSub调用add子过程PrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text):b=Val(Text2.Text)s=a+bText3.Text=sEndSub等价于:例7-2编写一个找出任意一个正整数的因子的程序PrivateSubCommand1_Click()DimIntaAsInteger,StAsStringInta=Text1.Text
CallFactor(Inta,St)Text2.Text=StEndSubPrivateSubFactor(ByValNAsInteger,SAsString)DimiAsIntegerFori=1ToN-1IfNModi=0ThenS=S&Str(i)NextiEndSub(2)把过程名作为一个语句来用
语法:过程名[实参1[,实参2……]]它与(1)的不同点是:去掉了关键字call和实参列表的括号PrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text):b=Val(Text2.Text)
adda,bEndSubPrivateSubadd(xAsInteger,yAsInteger)s=x+yText3.Text=sEndSub练一练:使用第2种调用方式修改例7.2PrivateSubCommand1_Click()DimIntaAsInteger,StAsStringInta=Text1.Text
Text2.Text=StEndSubPrivateSubFactor(ByValNAsInteger,SAsString)DimIAsIntegerForI=1ToN-1IfNModI=0ThenS=S&Str(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽滁州市第二人民医院护理工作劳务派遣人员招聘20人考试参考试题及答案解析
- 2026广西贺州市钟山县钟山镇中心小学招聘聘任制教师3人考试参考题库及答案解析
- 2026东台农商银行专场寒假实习招募80人考试参考题库及答案解析
- 2026四川眉山市丹棱县国有资产监督管理局招聘县属国有企业兼职外部董事2人考试备考题库及答案解析
- 2026年温州市龙湾区第二人民医院公开招聘编外工作人员3人考试参考试题及答案解析
- 2026四川广元市青川县交通运输局考调事业单位人员1人考试参考题库及答案解析
- 2026年湖口县公安局交通管理大队公开招聘交通协管员笔试模拟试题及答案解析
- 2026河北唐山遵化坤桐医院招聘卫生专业技术人员考试备考试题及答案解析
- 2026西藏文物局引进急需紧缺人才3人考试备考试题及答案解析
- 2024年秋季新人教版七年级上册地理全册导学案(2024年新教材)
- 2025年全科医生转岗培训考试题库及答案
- 外贸进出口2025年代理报关合同协议
- 2026年包头职业技术学院高职单招职业适应性测试参考题库带答案解析
- 2024年安徽理工大学马克思主义基本原理概论期末考试模拟试卷
- 2025年医院检验科主任年终述职报告
- 2025-2026学年人教版(简谱)(新教材)初中音乐七年级(上册)期末测试卷附答案(共三套)
- 2025年大学(森林保护)森林病理学期末试题及答案
- (南开中学)重庆市高2026届高三第五次质量检测物理试卷(含答案详解)
- 骨质疏松骨折课件
- 2025宁夏贺兰工业园区管委会招聘40人笔试备考试题及答案解析
- 透析充分性及评估
评论
0/150
提交评论