




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、24.1 过程的编写与调用 内部函数是内部函数是VB事先定义好的函数,我们可事先定义好的函数,我们可以直接拿过来用,但内部函数并不能解决所有的以直接拿过来用,但内部函数并不能解决所有的问题,有很多地方需要我们亲自动手,编写问题,有很多地方需要我们亲自动手,编写自定自定义的函数或者过程。义的函数或者过程。过程过程函数函数子过程子过程内部函数内部函数自定义函数自定义函数事件过程事件过程自定义子过程自定义子过程2022-3-2022-3-54.1.1 自定义函数的编写与调用自定义函数的编写与调用定义方式定义方式 Function 函数名函数名(形形参列表参列表) As End Function:Pu
2、blic|PrivateStatic,不能是不能是Dim。(形参列表形参列表):表示在调用时传递给函数的参数的变量列表,表示在调用时传递给函数的参数的变量列表, 圆括号必须要有。有返回类型圆括号必须要有。有返回类型关键字关键字Function与与End Function相呼应。相呼应。形参列表形参列表的声明语法:的声明语法:ByVal|ByRef 变量名变量名 As 类型类型64.1.1 自定义函数自定义函数Private Sub command1_Click() Dim m&, n&, c&, t&, i% Dim FacN&, FacM&, FacNM& m = Val(InputBox(
3、请输入请输入m的值的值, 组合公式组合公式) n = Val(InputBox(请输入请输入n的值的值, 组合公式组合公式) If n m Then t = n n = m m = t End If FacN = 1 For i = 1 To n FacN = FacN * i Next i FacM = 1 For i = 1 To m FacM = FacM * i Next i FacNM = 1 For i = 1 To n - m FacNM = FacNM * i Next i c = FacN / (FacM * FacNM) label1.Caption = Str(c)End
4、 Sub)!( !mnmnCmn7 可以将代码中功能重复的部分用自定义函数来编可以将代码中功能重复的部分用自定义函数来编写,这将大大提高编程的效率。写,这将大大提高编程的效率。Private Sub CmdOk_Click() Dim m&, n&, c&, t& m = Val(InputBox(请输入请输入m的值的值, 组合公式组合公式) n = Val(InputBox(请输入请输入n的值的值, 组合公式组合公式) If n m Then t = n n = m m = t End If c = Fac(n) / (Fac(m) * Fac(n - m) LblResult.Captio
5、n = Str(c)End SubPrivate Function Fac(ByVal k As Long) As Long Dim F&, i% F = 1 For i = 1 To k F = F * i Next i Fac = FEnd Function4.1.1 自定义函数自定义函数调用方式2022-3-2022-3-10 Sub 子过程子过程名名(形形参列表参列表) End Sub:Public|PrivateStatic,不能是,不能是Dim。(形参列表形参列表):表示在调用时传递给子过程的参数的变量列表,表示在调用时传递给子过程的参数的变量列表, 圆括号必须要有。没有返回类型圆
6、括号必须要有。没有返回类型关键字关键字Sub与与End Sub相呼应。相呼应。形参列表形参列表的声明语法:的声明语法:ByVal|ByRef 变量名变量名 As 类型类型4.1.2 自定义子过程(自定义子过程(SUB)Private Sub swap(a, b) Dim t t = a a = b b = tEnd Sub114.1.2 自定义子过程自定义子过程Private Sub Form_Click() Dim First!, Second!, Temp! First = InputBox(请输入第一个数:请输入第一个数:, First) Second = InputBox(请输入第二个
7、数:请输入第二个数:, Second) Print 初始值:初始值:First=; First, Second=; Second If First Second Then swap First, Second End If Print 交换后:交换后:First=; First, Second=; SecondEnd SubPrivate Sub swap(a, b) Dim t t = a a = b b = tEnd Sub124.1.2 自定义子过程(自定义子过程(SUB)调用方式调用方式使用使用Call关键字时,参关键字时,参数两边要加圆括号。数两边要加圆括号。省略省略Call关键字,
8、则必须关键字,则必须省略参数两边的圆括号。省略参数两边的圆括号。13自定义子过程与自定义函数的异同自定义子过程与自定义函数的异同区别:区别:(1)子过程以关键字)子过程以关键字Sub开始,函数以关键字开始,函数以关键字Function开始。开始。(1)子过程没有返回值,没有类型;)子过程没有返回值,没有类型; 函数有返回值,有类型。函数有返回值,有类型。(2)调用时,子过程是一条独立的语句;)调用时,子过程是一条独立的语句; 但函数不能作为独立的语句加以调用,但函数不能作为独立的语句加以调用,必须参与表达式运算必须参与表达式运算。相同点:相同点:(1)都属于过程。)都属于过程。(2)都能实现相
9、同的功能。)都能实现相同的功能。过程过程函数函数子过程子过程内部函数内部函数自定义函数自定义函数事件过程事件过程自定义子过程自定义子过程14形参:形参:在函数定义中的参数列表称为形参。形参标在函数定义中的参数列表称为形参。形参标明了调用自定义的函数或者过程所需参数的个数、明了调用自定义的函数或者过程所需参数的个数、位置和类型。形参仅仅是一个符号,是要被实际数位置和类型。形参仅仅是一个符号,是要被实际数据所代替的。据所代替的。实参:实参:实际参与运算的数据就是实参。实际参与运算的数据就是实参。参数传递:参数传递:程序在调用函数或过程时,实参代替形参的程序在调用函数或过程时,实参代替形参的过程。过
10、程。4.2 参数传递参数传递154.2 参数传递参数传递参数传递有两种方式:参数传递有两种方式: 按地址传递、按数值传递按地址传递、按数值传递 形参前加形参前加“ByRef”关键字或什么都不加的为按地址传递,关键字或什么都不加的为按地址传递, 形参前加形参前加“ByVal”关键字的是按数值传递。关键字的是按数值传递。2022-3-174.2.1 参数传递参数传递按数值传递按数值传递Private Sub Form_Click() Dim First!, Second!, Temp! First = InputBox(请输入第一个数:请输入第一个数:, First) Second = Input
11、Box(请输入第二个数:请输入第二个数:, Second) Print 初始值:初始值:First=; First, Second=; Second Print If First Second Then Call swap(First, Second) End If Print 交换后:交换后:First=; First, Second=; SecondEnd SubPrivate Sub swap(ByVal a,ByVal b) Dim t t = a a = b b = tEnd Sub形形参参实实参参2022-3-19Private Sub Form_Click() Dim First
12、!, Second!, Temp! First = InputBox(请输入第一个数:请输入第一个数:, First) Second = InputBox(请输入第二个数:请输入第二个数:, Second) Print 初始值:初始值:First=; First, Second=; Second Print If First Second Then Call swap(First, Second) End If Print 交换后:交换后:First=; First, Second=; SecondEnd SubPrivate Sub swap(a, b) Dim t t = a a = b
13、b = tEnd SubPrivate Sub swap(ByRef a,ByRef b) Dim t t = a a = b b = tEnd Sub4.2.2 参数传递参数传递按地址传递按地址传递按数值传递按数值传递将复印件上交,原件永远不受影响将复印件上交,原件永远不受影响按地址传递按地址传递将原件上交,改的就是原件将原件上交,改的就是原件实实参参形形参参201 3 4Private Sub Command1_Click() Dim A%, B%, C% A = 1 B = 2 C = 3 Call ss(A, B, C) Print A; B; CEnd Sub21数组为参数数组为参数
14、Private Function tim(n( ) As Integer) Dim t%, i% t = 1 For i = LBound(n) To UBound(n) t = t * n(i) Next i tim = tEnd FunctionPrivate Sub Command1_Click() Dim a(3) As Integer Dim k As Integer, j As Integer For j = LBound(a) To UBound(a) a(j) = InputBox(请输入请输入a( & j & )的值的值, 数组输入数组输入) Next j k = tim(a
15、( ) Print kEnd Subv形参的语法:形参的语法: ByRef 数组名数组名( ) As 类型类型 v无论是形参还是实参,无论是形参还是实参,都应省略其维都应省略其维数数!形参括号不能省略!实参括号可以!形参括号不能省略!实参括号可以省略。省略。v数组参数在传递时数组参数在传递时只能按地址传递只能按地址传递!2022-3-数组为参数数组为参数Private Function tim(n() As Integer, L As Integer) As Long Dim t%, i% t = 1 For i = 0 To L t = t * n(i) Next i tim = tEnd
16、Function也可以这样也可以这样自定义该函自定义该函数数231、过程的编写不能嵌套。、过程的编写不能嵌套。2、如果在调用时该形参对应的实参是一个表达式,、如果在调用时该形参对应的实参是一个表达式, 则按值传递方式调用过程。则按值传递方式调用过程。3、形参是数组时,只能是地址传递。、形参是数组时,只能是地址传递。小结小结:前个例子里如果改成前个例子里如果改成 Call ss(A, B1, C)则输出结果为则输出结果为1 2 4244.3 多模块程序设计多模块程序设计工程文件工程文件 (*.vbp)窗体模块窗体模块文件文件 (*.frm)类模块类模块文件文件 (*.cls)标准模块标准模块文件
17、文件 (*.bas)函数过程、子过程、函数过程、子过程、事件过程事件过程函数过程、子过程函数过程、子过程过程的相互调用与通信必然会涉及到过程的相互调用与通信必然会涉及到过程的作用域以及变量的作用域和生存期的问题。过程的作用域以及变量的作用域和生存期的问题。254.3.1 过程的作用域过程的作用域用两个限定词加以区分:用两个限定词加以区分:Private、Public 当过程前的限定词为当过程前的限定词为Private,则表明此过程只能被本,则表明此过程只能被本模块中其他的过程所调用,我们称之为模块中其他的过程所调用,我们称之为模块级过程模块级过程。 当过程前的限定词为当过程前的限定词为Publ
18、ic,则表明此过程不仅能被,则表明此过程不仅能被本模块所调用,也可以被其他模块中的过程所调用,我们本模块所调用,也可以被其他模块中的过程所调用,我们称之为称之为全局过程全局过程。过程作用域:过程作用域:过程能被调用的范围。过程能被调用的范围。264.3.1 过程的作用域过程的作用域过程前没有限定词时,过程前没有限定词时,默认为默认为Public。Public Sub swap(x%, y%) Dim T% T = x x = y y = TEnd Sub(标准模块)(标准模块)Private Sub Form_Click() Dim a%, b%, T% a = InputBox(请输入第一个
19、数:请输入第一个数:, a) b = InputBox(请输入第二个数:请输入第二个数:, b) Print 初始值:初始值:a=; a, b=; b If a b Then Call swap (a, b) Print 交换后:交换后:a=; a, b=; bEnd SubPrivate Sub Command1_Click() Form2.ShowEnd Sub(Form1模块)模块)Private Sub Form_Click() Dim p%, q%, T% p = InputBox(请输入第一个数:请输入第一个数:, p) q = InputBox(请输入第二个数:请输入第二个数:,
20、 q) Print 初始值:初始值:p=; p, q=; q If p q Then Call swap (p, q) Print 交换后:交换后:p=; p, q=; qEnd Sub(Form2模块)模块)274.3.1 过程的作用域过程的作用域思考:思考: (1)如果)如果swap在标准模块中是用在标准模块中是用Private定义的,定义的, 是否能被是否能被Form1和和Form2调用?调用? (2)如果)如果swap是在是在Form1中用中用Private定义的,定义的, 是否能被是否能被Form1和和Form2调用?调用? (3)如果)如果swap在在在在Form1中用中用Publ
21、ic定义的,定义的, 是否能被是否能被Form1和和Form2调用?调用? (4)如果在两个标准模块里都有)如果在两个标准模块里都有swap过程,过程, 这时应该如何调用?这时应该如何调用?284.3.1 过程的作用域(调用规则)过程的作用域(调用规则)294.3.2 变量的作用域和生存期变量的作用域和生存期变量的变量的作用域作用域:变量能被使用的:变量能被使用的范围范围。变量的变量的生存期生存期:变量从产生到消亡的:变量从产生到消亡的时间时间。按照声明变量的按照声明变量的位置位置和和限定词限定词的不同,变量分为三种:的不同,变量分为三种: 局部变量、模块级变量、全局变量。局部变量、模块级变量
22、、全局变量。2022-3-显示声明变量的显示声明变量的格式格式: as Dim、Static、Public、Private31什么样的变量才叫局部变量?什么样的变量才叫局部变量?局部变量的作用域和生存期局部变量的作用域和生存期局部变量局部变量以以DimDim声明声明动态动态变量变量以以StaticStatic声明声明静态静态变量变量用用DimDim或或StaticStatic在在过程内过程内声明的变量称为局部变量。声明的变量称为局部变量。2022-3-局部变量的作用域:局部变量的作用域:只能在声明它的本过程中使用,而不能只能在声明它的本过程中使用,而不能被其它过程使用。被其它过程使用。局部变量
23、的生存期:局部变量的生存期:若是动态变量,生存期为变量所在过程的若是动态变量,生存期为变量所在过程的执行期,因此执行期,因此过程结束,变量的值自动消失过程结束,变量的值自动消失;若是静态变量,;若是静态变量,生存期为整个应用程序的运行期,生存期为整个应用程序的运行期,过程结束,变量还会保持当过程结束,变量还会保持当前的值前的值。33 局部变量的作用域和生存期局部变量的作用域和生存期Private Sub Command1_Click() Dim n As Integer n = 10 Print nEnd SubPrivate Sub Command2_Click() Dim n As Int
24、eger n = 20 Print nEnd Sub假设在工程1的Form1窗体中定义了如下两个事件过程事件过程:打开工程打开工程1 12022-3-Private Sub Command2_Click() Static i As Integer i = i + 10 Print Spc(5);iEnd SubPrivate Sub Command1_Click() Dim i As Integer i = i + 10 Print iEnd Sub 局部变量的作用域和生存期局部变量的作用域和生存期假设在工程1的Form1窗体中定义了如下两个事件过程事件过程:打开工程打开工程1 135要活用静
25、态变量(要活用静态变量(Static)例如:例如:有一个人编了下面一段程序,想用变有一个人编了下面一段程序,想用变量量n记记录单击录单击窗体的次数。窗体的次数。Private Sub Form_Click() Dim n As Integer n = n + 1 Print 已单击次数:已单击次数:; n & 次次End Sub36什么样的变量才叫什么样的变量才叫模块级变量模块级变量? 模块级变量的作用域和生存期模块级变量的作用域和生存期用用Private或或Dim在在模块内模块内的的“通用声明通用声明”段声明的变段声明的变量。量。在我在我这里这里2022-3-模块级变量的模块级变量的作用域作
26、用域:只能在声明它的:只能在声明它的本模块本模块中使用,即能中使用,即能被本模块中的其它过程使用。被本模块中的其它过程使用。模块级变量的模块级变量的生存期:生存期:整个应用程序的运行期。整个应用程序的运行期。 模块级变量的作用域和生存期模块级变量的作用域和生存期38Private Z As IntegerPrivate Sub S( ) Z = Z + 2 Print ZEnd SubPrivate Sub Command1_Click( ) Z = Z + 2 Call S Print ZEnd Sub 模块级变量的作用域和生存期模块级变量的作用域和生存期打开程序打开程序程序执行时,程序执行
27、时,鼠标单击命令鼠标单击命令按钮按钮1一次,一次,会在窗体上看会在窗体上看到什么?到什么?39什么样的变量才叫全局变量?什么样的变量才叫全局变量?全局变量的全局变量的作用域作用域:能被这个应用程序中所有模块的所有:能被这个应用程序中所有模块的所有过程使用。过程使用。全局变量的全局变量的生存期生存期:整个应用程序的运行期。:整个应用程序的运行期。 全局变量的作用域和生存期全局变量的作用域和生存期用用Public限定词在限定词在模块内模块内的的“通用声明通用声明”段声明的变量。段声明的变量。在编程时,在编程时,全局变量越少越好全局变量越少越好。40Rem Form1Public i As Inte
28、gerPrivate Sub Command1_Click() i = i + 1 Print iEnd SubPrivate Sub Command2_Click() Form2.ShowEnd SubRem Form2Private Sub Command1_Click() i = Form1.i + 1 Print iEnd Sub 全局变量的作用域和生存期全局变量的作用域和生存期假设在工程假设在工程1中的中的Form1当中定义当中定义Command1_Click事件和事件和Command2_Click事件,事件,在在Form2当中定义当中定义的另外一个的另外一个Command1_Cli
29、ck事件。事件。打开程序打开程序41变量的变量的重名重名问题:问题: 我们可以在我们可以在不同的作用域不同的作用域内声明具有内声明具有相同名称相同名称的变量。它们是毫无关联的不同变量,不会相互影的变量。它们是毫无关联的不同变量,不会相互影响。响。如果发生如果发生作用域重叠作用域重叠,就应该采取,就应该采取“就近原就近原则则”。即首先看这个变量在本过程中是否有声明它的语句,即首先看这个变量在本过程中是否有声明它的语句,有则为局部变量;若无,再看这个变量在本模块中有则为局部变量;若无,再看这个变量在本模块中是否有声明它的语句,有则为模块级变量或者是全是否有声明它的语句,有则为模块级变量或者是全局变量。局变量。4.3.2 变量的作用域和生存期变量的作用域和生存期42Private Sub Command1_Click( ) Dim X As Integer, Y As Integer, Z As Integer X = 2 Y = 3 Z = X + Y Call S Print X, Y, ZEnd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024杭州科技职业技术学院辅导员招聘笔试真题
- 1.食品安全地方标准立项建议书(式样)
- 2023.06.21夏至一阴初升
- 2025年陕西省国家综合性消防救援队伍招聘考试试题【答案】
- 2025年湿簧式继电器项目发展计划
- 北京海淀区社区工作者招聘笔试真题2024
- 2025年昭通市昭阳区龙泉街道办事处选拔社区后备干部考试试题【答案】
- 2025年产后健康项目发展计划
- 消防专项方案
- 理财顾问实习报告范文-1
- 招商大使选聘管理办法
- 智慧教育基于大数据的个性化教学研究与实践
- 2025年中国铁路集团招聘笔试备考题库(带答案详解)
- 用工风险培训课件
- 海外现场安全健康环境管理(HSE)
- 2025年公安机关人民警察(行政执法)资格考试(客观题及刑法)含答案
- DB3502∕T 166-2024 既有厂区及老旧小区海绵城市方案设计导则
- 2025年 江西省金控科技产业集团有限公司招聘考试笔试试卷附答案
- 四川省成都市蓉城联盟2024-2025学年高一下学期6月期末考试物理试题(含答案)
- 2025年中国模内标签(IML)行业市场全景分析及前景机遇研判报告
- 【人教版】吉林长春2024-2025学年 五年级下学期期末数学试题【附答案】
评论
0/150
提交评论