第5章过程 51过程的基本概念 5.2Sub过程 5.3 Function过程 5.4过程的参数传递 5.5实践检验
5.1 过程的基本概念 5.2 Sub过程 5.3 Function过程 5.4 过程的参数传递 5.5 实践检验 第5章 过 程
第5章过程 本章知识点: 事件过程、通用过程、 Function过程的各自特点 ●过程的创建及调用,过程的作用范围 ●形式参数与实际参数、按值传递与按地址传递的概念
本章知识点: ⚫事件过程、通用过程、Function过程的各自特点 ⚫过程的创建及调用,过程的作用范围 ⚫形式参数与实际参数、按值传递与按地址传递的概念 第5章 过 程
51过程的基本概念 过程”是包含在过程声明语句和过程结束语句之间的VB.NET语句块。 所有的VB,N语句代码都是在过程内部编写的。 过程从代码中的其他某处被调用。当过程执行结束时,它将控制返回给 调用它的代码,此代码称为“呼叫代码”。呼叫代码是一个语句或语句内 的表达式,它通过名称指定过程并将控制转让给它 5.1.1过程种类 在vB中,除了系统提供的内部函数过程和事件过程外,用户可自定义下 列4种过程。 Sub保留字开始的为子过程,不返回值。 Function保留字开始的为函数过程,返回一函数值给呼叫代码。 Property保留字开始的为属性过程,返回和分配对象或模块上的属性 值。 Event保留字开始的为响应由用户操作或程序中的事件触发而执行的 Sub过程。 本章将主要讨论前2种过程, Property过程和Even过程将在第8章介绍
5.1 过程的基本概念 “过程”是包含在过程声明语句和过程结束语句之间的 VB.NET 语句块。 所有的 VB.NET 语句代码都是在过程内部编写的。 过程从代码中的其他某处被调用。当过程执行结束时,它将控制返回给 调用它的代码,此代码称为“呼叫代码”。呼叫代码是一个语句或语句内 的表达式,它通过名称指定过程并将控制转让给它。 5.1.1 过程种类 在VB中,除了系统提供的内部函数过程和事件过程外,用户可自定义下 列4种过程。 -- Sub保留字开始的为子过程,不返回值。 -- Function保留字开始的为函数过程,返回一函数值给呼叫代码。 -- Property保留字开始的为属性过程,返回和分配对象或模块上的属性 值。 -- Event保留字开始的为响应由用户操作或程序中的事件触发而执行的 Sub 过程。 本章将主要讨论前2种过程,Property过程和Event过程将在第8章介绍
5.1.2过程的特点 用过程构造代码有以下特点 应用程序中的每行代码都必须在某个过程的内部,如果将 大过程细分为更小的过程,应用程序的可读性将更强。 过程对执行重复或共享的任务很有用。可以在代码中的许 多不同位置调用过程,因此可以将过程用作应用程序的生成块。 过程允许将程序分为不连续的逻辑单元。调试单独的单元 与调试不包含过程的整个程序相比要容易 可以在其他程序中使用为某个程序开发的过程,而通常只 需少量修改甚至不需修改
5.1.2 过程的特点 用过程构造代码有以下特点: -- 应用程序中的每行代码都必须在某个过程的内部,如果将 大过程细分为更小的过程,应用程序的可读性将更强。 -- 过程对执行重复或共享的任务很有用。可以在代码中的许 多不同位置调用过程,因此可以将过程用作应用程序的生成块。 -- 过程允许将程序分为不连续的逻辑单元。调试单独的单元 与调试不包含过程的整个程序相比要容易。 -- 可以在其他程序中使用为某个程序开发的过程,而通常只 需少量修改甚至不需修改
5.2Sub过程 5.2.1事件过程与通用过程 VB. NET的Sub过程分为事件过程和通用过程两大类。事件是可被某对象 识别的操作或结果(如单击命令按钮或数值超限等),可以为它编写响应 代码。事件可以作为用户操作或程序计算的结果发生,也可以由系统触发 事件处理过程是为响应特定事件而编写的代码。有时多个不同的过程段需 要使用同一段程序代码,为此,可将这段代码独立出来,编写为一个共用 的过程,这种过程通常称为通用过程,它独立于事件过程之外,可供其他 过程调用。 对象事件的语法格式为 Private sub()[ Handles] End sub 其中 Handles关键字为可选参数,指示此过程是否可以处理一个或多个特定 事件
5.2.1 事件过程与通用过程 VB.NET的Sub过程分为事件过程和通用过程两大类。事件是可被某对象 识别的操作或结果(如单击命令按钮或数值超限等),可以为它编写响应 代码。事件可以作为用户操作或程序计算的结果发生,也可以由系统触发。 事件处理过程是为响应特定事件而编写的代码。有时多个不同的过程段需 要使用同一段程序代码,为此,可将这段代码独立出来,编写为一个共用 的过程,这种过程通常称为通用过程,它独立于事件过程之外,可供其他 过程调用。 对象事件的语法格式为: Private Sub_() [Handles ] End Sub 其中: Handles关键字为可选参数,指示此过程是否可以处理一个或多个特定 事件。 5.2 Sub过程
包括所有共享此过程的(事件)过程名 就是程序设计者编写的事件响应程序代码. 虽然可以自己键入事件过程的声明语句,但VBNE可自动声明,自动声 明不仅快捷,而且不会出现人为错误,是一种值得提倡的方法。具体方法 如下: 在代码窗体中,从“对象下拉列表框”中选择个对象,从“过程下拉 列表框”中选择一个事件过程名,就可在代码窗口中生成一个事件过程声 明模板。例如:当对象选为窗体Form1,过程选择为Cick,则在代码窗口就 成如图5-1所示的声明模板。 买arn1个事妹) Cliek 日 Public Class Form1 Private Sub Fornl Click Oyval sender As Object, ByVal e As System. EventArgs) Handles Me. Click End sub End class 图5-1声明事件过
包括所有共享此过程的(事件)过程名。 就是程序设计者编写的事件响应程序代码。 虽然可以自己键入事件过程的声明语句,但VB.NET可自动声明,自动声 明不仅快捷,而且不会出现人为错误,是一种值得提倡的方法。具体方法 如下: 在代码窗体中,从“对象下拉列表框”中选择一个对象,从“过程下拉 列表框”中选择一个事件过程名,就可在代码窗口中生成一个事件过程声 明模板。例如:当对象选为窗体Form1,过程选择为Click,则在代码窗口就 生成如图5-1所示的声明模板
通用过程只有在被调用时才被执行,主调程序可以是事件过程,也可以 是通用过程。通用过程可以保存在窗体模块和标准模块中,其与事件过程 不同之处在于,通用过程不是由对象的某个事件激活的,因此,通用过程 的创建方法与事件过程有所不同。 5.2.2通用过程的创建 已经学习了事件过程的创建方法,那么通用事件呢?可以在“代码编辑 窗口”中直接输入用户创建的过程,此时,代码窗口中的“对象下拉列表 框”变为“常规”,“过程下拉列表框”显示“"声明”。 通用过程的定义形式如下 []Su(]) End sub 说明: (1)为可选项,可以是以下内容之 Public:全局过程,没有访问限制,为默认访问修饰符。 Protected:受保护过程,只能从其自身的类或派生类访问。 Friend:友元过程,只可从包含其声明的程序集内访问。 Private:私有过程,只能在模块级使用 Private
通用过程只有在被调用时才被执行,主调程序可以是事件过程,也可以 是通用过程。通用过程可以保存在窗体模块和标准模块中,其与事件过程 不同之处在于,通用过程不是由对象的某个事件激活的,因此,通用过程 的创建方法与事件过程有所不同。 5.2.2 通用过程的创建 已经学习了事件过程的创建方法,那么通用事件呢?可以在“代码编辑 窗口”中直接输入用户创建的过程,此时,代码窗口中的“对象下拉列表 框”变为“常规”,“过程下拉列表框”显示“声明”。 通用过程的定义形式如下: [] Sub([]) End Sub 说明: (1)为可选项,可以是以下内容之一。 -- Public :全局过程,没有访问限制,为默认访问修饰符。 -- Protected :受保护过程,只能从其自身的类或派生类访问。 -- Friend :友元过程,只可从包含其声明的程序集内访问。 -- Private :私有过程,只能在模块级使用 Private
过程名>使用与变量名相同的命名规则。过程名不返回值,而是 通过形参与实参的传递得到结果,调用时可返回多个值。 变常数建发上发过栓中跳的封 语句外,还可以包含局部 4)的语法格式 以值ona[ ByVal][ ByRet][ [ParamArray代表 教盆嘉 只对 Optional参数合法。如 果类型为oect,则显式的 Nothing
(2)使用与变量名相同的命名规则。过程名不返回值,而是 通过形参与实参的传递得到结果,调用时可返回多个值。 (3)是VB的程序段,除一般的执行语句外,还可以包含局部 变量或常数定义语句及Exit Sub从过程中跳出的语句。 (4)的语法格式。 [Optional] [{ByVal]|[ByRef}] [ParamArray][As][=] 其中: -- Optional表示参数不是必须的关键字。如果使用了该选项,则(形参 表)中的后续参数都必须是可选的,而且必须都使用Optional关键字声明。 如果使用了ParamArray,则任何参数都不能使用Optional。 -- ByVal表示该参数按值传递;ByRef表示该参数按地址传递。ByRef是 VB的默认选项。 -- ParamArray只用于形参表的最后一个参数,使用ParamArray关键字 可以提供任意数目的参数。ParamArray关键字不能与ByVal、ByRef或 Optional一起使用。 -- 代表参数的变量的名称,遵循标准的变量命名约定。如果 是数组变量,要在数组名后加上一对圆括号。 -- 代表任何常数或常数表达式,只对Optional参数合法。如 果类型为Object,则显式的默认值只能是Nothing
5.2.3通用过程的调用 可以使用独立的调用语句来显式调用Sub过程,不能在表达式中使用过 程名称来调用该过程,必须提供所有必选参数的值,并且必须用括号将实 参数列表括起来。如果未提供仼何参数,则也可以选择省略括号。 调用Sub过程的语法如下乐示 [Ca[( Cl!关键字是可选项。 例5-1调用全局过程 设计说明: 在工程中建立三个模块:Form1窗体模块,Form2窗体模块, Module1标 准模块。其中,Form1、Form2窗体界面分别如图5-2(a)、(b)所示。 在上述三个模块中分别建立三个全局过程: F1 test( a as form),F2test(a As Form), M test( a as form),代码如下 Form1窗体代码如下: Public Sub F1_testo Me. Label1.Tet="执行Form1窗体过程F1test""输出到 Label1 End sub
5.2.3 通用过程的调用 可以使用独立的调用语句来显式调用Sub过程,不能在表达式中使用过 程名称来调用该过程,必须提供所有必选参数的值,并且必须用括号将实 参数列表括起来。如果未提供任何参数,则也可以选择省略括号。 调用Sub过程的语法如下所示: [Call] [()] Call 关键字是可选项。 例5-1 调用全局过程。 设计说明: 在工程中建立三个模块:Form1窗体模块,Form2窗体模块,Module1标 准模块。其中,Form1、Form2窗体界面分别如图5-2(a)、(b)所示。 在上述三个模块中分别建立三个全局过程:F1_test(a As Form),F2_test(a As Form),M_test(a As Form),代码如下: Form1窗体代码如下: Public Sub F1_test() Me.Label1.Text = "执行Form1窗体过程F1_test" '输出到Label1 End Sub
Form2窗体中的全局过程F2test代码如下 Public Sub F2_testo Form1.Labe2.Text="执行Form2窗体过程F2test" 输出到Form1窗体的Labe2 End Sub Private Sub Button1_Click(By Val sender As System Object ByVal e as System EventArgs) Handles Button1. Click CaF2test()"调用其他窗体模块中的 Public过程必须加窗体模块 名 End sub Module1中的全局过程Mtes代码如下 Sub Maino Dim f1 as New form 1 f1. ShowO End sub Public Sub M_test Form1Labe3.Text="执行 Module1中Mtes过程 输出到Form1窗体的Labe3 End sub 程序运行结果如图52(c)所示
Form2窗体中的全局过程F2_test代码如下: Public Sub F2_test() Form1.Label2.Text = "执行Form2窗体过程F2_test" '输出到Form1窗体的Label2 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call F2_test() '调用其他窗体模块中的Public过程必须加窗体模块 名 End Sub Module1中的全局过程M_test代码如下: Sub Main() Dim f1 As New Form1 f1.Show() End Sub Public Sub M_test() Form1.Label3.Text = "执行Module1中M_test过程" '输出到Form1窗体的Label3 End Sub 程序运行结果如图5-2(c)所示