版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-2-2212022-2-222定义Sub过程(1)Sub过程以Sub开头,以End Sub结束,之间是“过程体”或“子程序体”。格式中的参量的含义如下: Static:指定了过程中的局部变量在内存中的默认存储方式。如果使用了Static,则在每次调用过程时,过程中的所有局部变量的值保持不变;否则就会被初始化为零。对过程之外定义的变量没有作用。2022-2-223 Private:表示Sub过程是私有的过程,只能被本模块中的其它过程所访问,其它模块中的过程不能访问。 Public:表示Sub过程是公有过程,可以在程序中的任何地方调用它。 过程名:一个标准的变量名,同一模块中,不能和一般
2、变量、数组变量或Functio过程名重名。 参数表列:调用时传送给该过程的简单变量名或数组名,各名字之间用逗号分隔开。“参数表列”指明了调用时传送给过程的参数的类型和数量,每个参数的为 其中“变量名”是一个合法的VB中的变量名或数组名。如果是数组名,则要在数组名后加上一对括号。“数据类型”指的是变量的类型。 ByVal参数是可选的,如选择了,则说明该参数是传值的,没有的话就是“引用”2022-2-224End Sub语句标志着Sub过程的结束,每个Sub过程中必须有一个End Sub子句,当程序执行到End Sub时,就会退出该过程,并且返回到调用该过程的语句的下一条语句。在Sub过程中还可以
3、有一个或多个Exit Sub语句可以从过程中退出。 Sub过程不允许嵌套。即Sub过程中不能再定义Sub过程或Function过程,不能用GoTo、GoSub或Return语句进入或退出一个Sub过程,只能通过正常调用来执行Sub过程,而且可以嵌套嵌套调用。 2022-2-225 通用过程不属性任何一个在事件过程,只能建立在标准模块或窗体模块中。标准模块的建立有二种方法: 方法的操作步骤是: 执行“工程”中的“添加模块”命令,打开“添加模块”对话框选择“新建”选项卡,双击“模块”图标,打开代码窗口。 执行“工具”中的“添加过程”命令,打开“添加过程”对话框。 在“名称”框中输入过程名。 在“类
4、型”栏中选择过程的类型。 在“范围”栏中选择过程的适用范围,公有的或私有的。 方法的操作步骤是:执行“工程”中的“添加模块”命令,打开模块代码窗口,然后在窗口中键入过程的第一行开始。2022-2-226 调用一个Sub过程,就是要执行该过程。调用执行有二种方式,一种是将过程的名字放在一个Call语句中,另一种是直接将过程名字作为一个语句来使用。用Call语句来调用Sub过程 在调用时,实际参数的数量、类型都要和Sub过程定义中的参数的数量和类型都要一样。“实际参数”是传送给Sub过程的变量或常数。 例:call Tryout(a,b)把过程名作为一个语句来使用 和前一种相比,没有了关键字Cal
5、l,在实际参数中也没有了括号。Try a,b 举例说明:2022-2-227的一般lPrivate|Public Sub 控件名_事件名(参数表)l 语句组lEnd sub的一般lPrivate|Public sub Form_事件名(参数表)l 语句组lEnd Sub的一般l 过程名(参数表) 2022-2-228 Function过程定义的如下 Function过程以Function开头,以End Function结束,之间是“过程体”或“函数体”。格式中参数的含义与子过程Sub中的完全一样。2022-2-229调用Sub过程相当于执行一个语句,它不会返回任何值;而执行一个Function
6、过程,一定会返回一个函数值,所以它可以相内部函数一样在表达式中使用它。在Function过程中至少有一条语句是“过程名=表达式”这样的,即将要返回的值传送给过程名。过程不能嵌套,即不能在事件过程中再来定义过程(包括过程和Function过程),只能在事件过程中调用相应的过程。 建立Function过程的方法和建立Sub过程的方法一样。Function BinarySearch(lower as integer,upper as integer) as boolean If lower=upper then binarysearch=true exit function else binarys
7、earch=false end if end function2022-2-2210 Function过程可以像内部函数一样来使用。 Function过程本身就要返回一个值,所以实际上就是一个函数,通常称为子函数。举例:2022-2-2211声明文件 窗体模块(.frm)文件类模块(.cls文件) 标准模块(.bas文件)子程序过程(sub)函数过程(func_tion) 事件过程(sub) 声明部分 应用程序应用程序工程文件工程文件(.vbp)子程序过程(sub)函数过程(func_tion) 事件过程(sub) 2022-2-2212 在调用一个过程时,必须要将实际参数传送到过程中去完成实
8、际参数和形式参数的结合,然后用实际参数执行执行过程。 是是。在VB中有二种方式来传送参数,即按位置传送和指名传送。 实际参数的次序必须和形式参数的次序完全一样,参数的位置、数量和类型都必须保持一致。 在形参中,只能是变长的字符串(如x$、x As String),而不能用定长字符串来作为形参的定义(如x As String*8)。2022-2-2213lSub testsub(a as integer,array() as single,recvar as rectype,c as string)l l lType rectypel Rand as string *12l SerialNum
9、as longlEnd typelDim recv as rectypelCall testsub(x,a(),recv,dephone)2022-2-2214 指名参数传送即将要传送的实际参数的值用“:=”的形式赋给对应的形参。这样的传送方式只认形参的名,而不认形参的传送位置。sub add_num(x as integer, y as integer, z as integer) r=(x+y)*z print r end sub下面的四条调用语句都是执行相同的功能add_num 4,6,8add_num x:=4,y =6,z8add_num y =6, x4, z:=8add_num
10、z8, y6, x =42022-2-2215 在VB中有二种方式来传送参数,即传地址和传值。其中习惯上称为。 在默认的情况下,都是通过来传送给过程的。如在过程中改变了参数的值,则就会改变传送给过程的实参的值。因为实际参数是存放在内存中的某个地址中,通过引用来调用一个过程时,只是将实参的地址传送给相应的形参,所以,实参和形参的地址是同一个,当形参中的内容改变时,实参的内容也相应的改变了。如果在调用过程中不希望改变实参的值,则不能使用这种引用的方式,只能用传值的方式。 传送地址比传值能够节省内存和提高工作效率。过程中的形参只是一个地址,系统不要为它的值分配内存空间,只需要记住它是一个地址就可。(
11、对字符串的引用比较明显)2022-2-2216 传值就是通过,。这种情况下,则需要将实参的值先保存在内存中的一个临时单元中,再将该单元的地址传送给形参。因为被调用的过程没有真真地访问实参变量的原始地址,也就不会改变原来实参变量的值。 传值是通过加上关键字来实现的。即在形参前面加上,则该形参的传送就是传送的值。 传送地址的效率比传值的要高,但在传送地址方式中,形参并不是一个真真的局部变量,则有可能会对程序的正常执行带来意想不到的结果。所以在有些情况下,只能用传值的方式才能得到正确的结果。2022-2-2217 在VB中允许将数组作为实参传送到过程中。例 在这个过程中有二个数组形参。在用数组作形参
12、时,应在数组名的后面加上一对括号,不要和普通变量混淆。调用此过程时可用命令 这样,数组p,q就作为实参传送给过程中的数组a,b,这种传送方式是传送地址,而不是传值。在传送地址的方式中,形参的值改变也会使实参中相应的值改变。 在传送数组时,除基本的规则外,还应注意:传送数组,数组名在形参、实参表中出现,并且省略相应的上下界,但是括号不能省略。如果不是整个数组传送,而只是传送,这时就要在实参中加上指定数组元素的下标。2022-2-2218传送记录类型变量l type stockiteml partnumber as string*8l description as string*8l unitpr
13、ice as singlel quantity as intrgerlEnd typelDim stockrecord as stockitemlCall findrecord(stockrecord)lSub finfrecord(recordvar as stockitem)llEndsub2022-2-2219单个记录元素的传送:l 实参表中:记录名.元素名ltype stockiteml partnumber as string*8l description as string*8l unitprice as singlel quantity as intrgerlEnd typelS
14、ub PrintpriceTeg(desc as string,price as single)llEnd sublDim stickrecord as stockitemlCall printpriceteg(stockrecord.description,stockrecord.unitprice)l2022-2-2220将积分区间a,bn等分,小区间的长度为, 第i块小矩形的近似面积为: 整个积分的结果为这n块小面积的累加,即 :hxfxfsiii2)()(1nabhhhiafihafSni102) 1()(11)()()(2niihafhbfafhS=h/2f(a)+2f(a+h)+2
15、f(a+2h)+S=h/2f(a)+2f(a+h)+2f(a+2h)+2f(a+2f(a+(n-1n-1)h)+f(b)h)+f(b)2022-2-2221 在前面讲的要求一个过程中的形参数量是固定的,调用时传送的实参的数量要和形参的数量相同。实际上在VB的过程中还可指定一个或多个形参是可选参数。定义可选参数用的是关键字,在过程中使用可选参数时要利用函数来测试是否传送了可选参数。Sub Multi(fir As Integer,sec As Integer,) n=fir*sec If Then n=n*thi Print nEnd Sub 在调用时,二个或三个实参都是正确的。可选参数在过程中
16、定义时,都有要放在参数表的最后,并且必须是Variant类型。可选参数可以有多个。2022-2-2222 这时数组名是一个形参,只有名字和括号,而没有上下界。例如,使用可变参数来建立一个求出任意多个数乘积的过程。Sub Multi(ParaArray Num() n=1 For Each x In Num:n=n*x:next x print nEnd Sub 调用时可用节Multi 2,3,4,5 或 Multi 3,6,9,并且因为可变参数是变体类型,只能使用传送地址的方式。2022-2-2223 除了一般可用变量作为形式参数外,在VB中还可以使用对象作为参数,即窗体或控件作为通用过程的参
17、数。 设计一个多窗体的程序,有多个窗体,除了名字不一样外,窗体的位置、大小都有相同。一般情况下可以这样来写:Form1.Left=2000 : Form1.Top=3000Form1.Width=5000 :Form1.Height=3000Form2.Left=2000 : Form2.Top=3000Form2.Width=5000 :Form2.Height=30002022-2-2224 可以用窗体作为参数,编写一个通用的过程。Sub FormSet( As Form) .Left=2000 .Top=3000 .Width=5000 .Height=3000End Sub 在调用时,
18、可以使用窗体作为实参。 FormSet 即可设置窗体Form1的位置和大小。 在上述过程中, 形参FormNum的类型为窗体(Form) 控件也可以作为过程中的形参,它的类型为Control,在过程中可以设置控件所需的属性,再用不同的控件来调用此过程。2022-2-2225 控件作为参数的使用比窗体要复杂一些,因为不同的控件所具有的属性并不一样,如在调用过程时,用不同的控件来作实参,而该控件产不具有该属性时,就会产生错误。为了保证实参中的控件和形参中的控件是同一类型的控件,VB中提供了一个语句TypeOf来检查某个控件参数是否属于某种控件类型。 这里的控件类型是控件的关键字。2022-2-22
19、26 我们前面讲过静态变量。只能出现在事件过程、Sub过程或Function过程中。只是局部变量。但在过程结束后,该变量的值仍然会保留下来。 在程序设计中,常用于以下二种情况。记录一个事件被触发的次数,即程序运行时事件发生的次数。用于作为开关切换的变量。 用Static语句定义的变量可以和在模块定义的变量或全局变量重名。过程内的该变量只是局部变量。用数组作为局部变量放在该语句中时,使用前应标出其维数。 sub subpro() static arr(-5 to 5) as integer end sub2022-2-2227 就是。 VB中的过程具有递归调用功能,递归分成二类:和。递归在阶乘运
20、算、级数运算等某些方面特别有效。 在执行递归操作时,VB将递归过程中的相关信息存放在堆栈中。32位版本的递归调用的层数没有限制。 :N! 最大公约数 cccccnmnmnmnmmnm1112022-2-2228cccccnmnmnmnmmnm111562015212015213456456566cccccccccccccccccccccc383626362637132313241425152616273727383858858 2022-2-2229Sub f1(x) x=f2(xx)*3End SubSub Command1_Click() Call f1(y)End SubFunction
21、 f2(x) f2=f3(x)+3End SubFunction f3(x) f3=x*xEnd SubSub f1(x) Call f1(y)End Sub过程的直接调用过程的直接调用Sub Command1_Click() Call f1(y)End Sub过程的递归调用过程的递归调用2022-2-2230)!2() 1()!1()!1(!nnnnnn 递归过程递归过程 过程在自身定义的内部调用自己。Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Elsefac = n * fac(n - 1) End If End
22、Function1) 1fac(*11)fac(nnnnnSub Command1_Click() Print “fac(4)=”;fac(4)End Sub结果结果:fac(4)=242022-2-2231递推回归在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。回归过程:不断从栈中弹出当前的参数,直到栈空。递归算法设计简单,但消耗的机时和占据的内存空间比非递归大。思考: 若上述fac函数中: If n = 1 Then fac = 1 即仅有语句:fac = n * fac(n - 1) 或 nr Then Call f(
23、n r, r) Print n Mod r; End Sub Private Sub Command1_Click() Call f(100, 8) End Subn r 返回地址返回地址 12 8 2 100 8 2 显示结果显示结果 1 4 42022-2-2234 在VB中,不但可以调用通用过程,而且可以调用各种应用程序。即凡能在Windows下运行的应用程序基本上都可以在VB中调用。 : ) 2022-2-2235 “命令字符串”是要执行应用程序的文件名(包括路径)它必须是可执行文件。 调用某个应用程序并成功地执行后,Shell函数返回一个任务标识。 以异步方式执行其他程序。用该函数启
24、动的程序还没有执行完,就可能已经执行Shell后面的语句了。2022-2-22362022-2-2237 菜单的作用有两个:一是提供人机对话的界面;二是管理应用系统,控制各功能模块的正常运行。 菜单分成两种基本类型:弹出式菜单和下拉式菜单。这二种菜单是在Windows中最常见的菜单了。下拉式菜单是一种典型的窗口式菜单。窗口是屏幕上的一个特定的矩形区域,可显示也可隐藏,多个窗口之间可以互相覆盖。在Windows中下拉式菜单用的最多。 在下拉式菜单中,有一个主菜单,其中包括若干个选项,每一项又可“下拉”出下一级的子菜单,这样逐级下拉,用一个个窗口的形式弹出在屏幕上,选择后菜单又会出屏幕上消失。2022-2-2238 下拉式菜单的优点:(1)整体感强,操作一目了然,界面友好、直观,使用方便,易于学习和掌握。(2)具有导航功能,为用户在各个菜单的功能间进行导航。(3)占用屏幕空间小,通常只占用屏幕最上面的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年裂缝发育脆弱岩层描述为布满裂纹玻璃案例
- 外交和领事关系法的基本制度
- 2026年网络安全事件应对培训
- 气道净化护理的并发症预防与处理
- 包皮术后疼痛缓解技巧
- 小学语文 3 四个太阳教案
- 安徽省阜南县2025-2026学年九年级上学期英语期末试卷(含答案及听力原文无听力音频)
- 宠物护理新媒体平台运营
- 妊娠巨吐的孕期护理播客
- T∕GDACM 0153-2025 中医技术感染预防规范
- 有机试剂工安全检查知识考核试卷含答案
- 2026年台州职业技术学院单招综合素质考试题库及答案详解(名校卷)
- 2025广东珠海市中西医结合医院招聘聘用合同制工作人员27人(第二批)笔试历年典型考题及考点剖析附带答案详解试卷2套
- 2026年温州永嘉县国有企业面向社会公开招聘工作人员12人考试参考题库及答案解析
- 2025中国国新招聘笔试参考题库附带答案详解
- 2026广东东莞农商银行总行岗位社会招聘考试参考试题及答案解析
- 2026法律基础常识试题及答案
- 《耳鼻喉科耳部手术诊疗指南及操作规范(2025版)》
- 2025年幼儿园初级保育员证考试试题和答案
- 航空航天飞控系统设计手册
- 2026年福建省烟草专卖局第二批招聘(127人)考试参考试题及答案解析
评论
0/150
提交评论