vb 调用sub过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

引用
参数通过两种方式传送,即传地址和传值,传地址习惯上称为引用, 引用方式通过关键字byref实现。在定义通用过程中如果形参前有 关键字byref(通常省略),则该参数通过引用(传地址)方式传送。 当通过引用来传递实参时可以改变传送给过程的变量的值。
传值
传值就是通过值传送实际参数,即传送实参的值而不是传送他的地址。 此时系统把需要传送的变量复制到一个临时单元中,然后把该临时 单元的地址传送给被调用的通用地址。 在VB中传值方式通过关键字byval实现,即在定义通用过程中如果形 参前有关键字byval则该参数用传值方式,否则用引用方式传送。 例子,使用传值方式与传地址方式的规则: 1、对于整型、常整型或单精度参数,如果不希望过程修改实参的值 则应加上关键字byval,而为提高效率字符串和数组应通过地址传 送,用户定义的类型(记录)和控件只能通过地址传送。 2、对于其他类型:双精度、货币型和变体型数据可以用两种方式。 此类参数最好用传值方式。 3、如果没有把握一般用传值方式传送所有变量,在调试程序后再把 部分参数改为传地址以加快运行速度。
调用sub过程
要执行一个过程,必须调用该过程。调用sub过程 的方法有两种: 把过程的名字放在call语句中; 把过程名作为一个语句来使用。 1、用call语句调用sub过程 格式:call 过程名[(实际参数)] 2、把过程名作为一个语句来使用 格式:过程名 实际参数 与第一种的区别在于省略了call ,去掉了实际参 数的括号。
可变参数
可变参数过程通过paramarray命令来定义,一般 格式: sub 过程名( paramarray 数组名) 注:数组名只是一个形式参数,只有名字和括号, 没有上下界,数组类型默认为variant。 注意: 1、由于可变参数是variant类型,故其中的参数 可以是任何类型的。 2、可变数组中的数是连续的,不可以有空缺,否 则会无法进行计算。
对象参数
在VB中允许对象(窗体或控件)作为通用过程的 参数。格式为: sub 过程名(形参表) 语句块 [exit sub] …… end sub 注意:形参表中形参的类型通常为control或form。 对象只能通过传地址方式传送,不在参数前加 关键字byval
对象参数
注意:在使用控件作为参数时必须考虑到作为实参的控件是否具有通 用过程中所列的控件的属性。 在vb中提供了一个typeof语句,格式如下: [if | elseif ] typeof 控件名称 is 控件类型 Typeof语句放在通用工程中,控件名称 指的是控件参数(形参)的名 字,即as control前面的参数。控件类型是代表各种不同控件的关 键字,这些关键字是: checkbox(复选框) frame(框架) combobox(组合框) hscrollbar(水平滚动条) commandbutton(命令按钮) label(标签) listbox(列表框) dirlistbox(目录列表框) drivelistbox(驱动器列表框) menu(菜单) filelistbox(文件列表框) textbox(文本框)
SUB过程
参数列表 指明了调用时传送给过程的参数的类型和个数,每个参 数的格式为:[byval] 变量名[( )][as 数据类型] 如果加上byval则表明该参数是传值参数,没有byval或者加byref的 参数称为引用参数。 在定义sub过程时,参数列表中的参数称为形式参数,不能用定长 字符串变量或定长字符串数组作为形式参数。 2、end sub表明sub过程的结束,每个sub过程必须有一个end sub子 句,在一个子过程体内可以用一个或多个exit sub语句退出。 3、sub过程不能嵌套。在sub过程内不能定义sub过程或function过程, 不能用goto语句进入或转出一个sub过程,只能通过调用执行sub过 程,而且可以嵌套调用。
传送记录
记录是用户定义的类型,传送记录实际上是传送记录的变量。 一般步骤如下: 1、定义记录类型,语法格式如下: type 记录名 成员名 as 类型[长度] …… end type 2、定义记录类型变量 3、调用过程,并把定义的记录变量传送到过程 4、调用过程时注意形参类型匹配 例子 自定义记录类型 代码见记录.vbp
参数传递
形参:在sub、function过程定义中出现的变量名。 形参 实参:在调用sub、function过程中传送给sub、function过程的常数、 实参 变量、表达式或数组。 传送方式: 传送方式:按位置传送和指名传送 按位置传送:是大多数语言处理子程序调用时使用的方式,当使用这 种方式时实际参数的次序必须和形式参数的次序匹配,即位置次序 必须一致。 如下例子: 过程定义:sub test_sub(p1 as interger,p2 as single,p3 as string) 过程调用:call test_sub( a%, b!, “test”) 在传送实参时形参表与实参表中对应变量的名字不必相同,但是包含 的个数必须相同,同时实参与相应参数的类型必须相同。
第九章 过程
SUB过程
事件过程:当发生某个事件时对该事件做出相应的程序段。 通用过程:多个不同的事件过程可能需要使用同一段相同的程序代码, 因此把这一段程序代码独立出来作为一个过程。 通用过程分为两类:子过程(sub过程)、函数过程(function过程)
建立sub过程 过程 建立
1、定义sub过程 语句结构如下: [static][private][public] sub 过程名 [(参数列表)] 语句块 [exit sub] [语句块] End sub
Function过程
2、调用function过程返回一个值,因此可以 像内部函数一样在表达式中使用,由 function过程返回的值放在表达式中,并 通过“过程名=表达式”把它的值赋给 “过程名”。在function过程中省略“过 程名=表达式”,则该过程返回一个默认 值:数值函数返回0值,字符串函数过程 返回空字符串。 3、过程不能嵌套,因此不能在事件过程中 定义通用过程(包括sub过程和function过 程),只能在事件过程内调用通用过程。
通用过程与事件过程
当一个模块调用其他模块的过程时,被调用的过程必须是“公用 的”(public)
Function过程
Sub过程不返回值,可以直接作为独立的语句调用。而function过程返 回一个值,通常出现在表达式中。
建立function过程 过程 建立
定义的格式如下: [static][private][public] function 过程名 [( [(参数列表)][as 类型] )][as ] [语句块] [过程名=表达式] [exit function] [语句块] end function 说明:1、function过程以function开头,以end function结束,在两者 之间是描述过程的语句。“As 类型”是function过程返回的值的数 据类型,省略则是variant。
参数传递
形式参数列表中各变量之间用逗号隔开,表中的变量可以是: 除定长子符串之外的合法变量名; 后面跟有左右括号的数组名。 实际参数表中的各项用逗号隔开,实参可以是: 常数、表达式、合法的变量名、后面跟有左右括号的数组名。 注意:必须把所需要的实参传送给过程,取代相应的形参,执行过程 的操作,实参与形参必须按位置次序传送。 指名传送:即显式地指出与形参结合的实参,把形参用“:=”与实参 连接起来。和位置传送不同,指名传送方式不受位置次序的限制。
局部内存分配
一般来讲在运行程序时VB会为全局变量分配内存,而局部变量 在过程开始时为变量分配内存,过程结束时会清除这些变量 而收回内存。当再次调用该过程时重新建立这些变量。 当过程结束时如果需要保存在局部变量中的数据,则需要把该变 量声明为全局变量或模块级变量。如果声明的变量只在一个 过程中使用则使用static语句,该语句如下: static 变量表 变量表格式如下: 变量 [( )] [as 类型][,变量[( )][as 类型]]…… 注意:static语句只能在事件过程、sub过程、function过程中, 过程中的static变量只在本过程中可见,本过程结束后变量的 值与模块级变量一样其值可以保留。
Baidu Nhomakorabea
可选参数与可变参数
可选参数: 在定义参数时如果某个参数是可选的需要在该参数前加关键字optional, 并在过程中通过ismissing函数测试调用时是否传送可选参数。可选 参数必须放在最后面,并且类型为variant。 ismissing有一个参数,即由optional指定的形参的名字,其值返回 为boolean,结果为true或false。
建立sub过程
在标准模块中建立通用过程方法: 方法1、菜单“工程—添加模块”,在对话框中选择“新建”选项卡, 双击“模块”图标,打开模块代码窗口。 执行“工具—添加过程”,在对话框中输入过程名,并设置相应的 选项。单击确定返回代码输入框输入代码。 方法2、执行“工程—添加模块”,打开代码窗口,然后输入过程的 名字。例如:sub test( ),按回车后显示: sub test( ) end sub 在sub与end sub之间输入代码
SUB过程
说明: 1、sub过程以sub开始,以end sub结束,中间的描述过程操作的语句 块称为过程体过子程序体。语句中的参数含义如下: Static 指定过程中的局部变量在内存中的默认存储方式。如果使用 static语句则每次调用的局部变量值保持不变;省略static则默认为 自动的,每次调用变量时局部变量被初始化为0或空字符串。 Private 表示sub过程为私有过程,只能被本模块中的其他过程访问, 不能被其他模块中的过程访问。 Public表示sub过程为公有过程,可以在程序的任何地方调用它。一 般在标准模块中用public定义。如果在其他窗体模块中使用,则应 加上窗体名作为前缀。 过程名 不超过255个字符的变量名,在同一个模块中同一个变量名 不能既作sub过程名又做function过程名。
数组参数的传送
2、如果只传递数组的某个元素,则需要数组名后的括号中写上指定元 素的下标。 3、用lbound与ubound函数来确定传送给过程的数组的大小。
参数传送注意事项
1、字符串和数值常数分别传送给字符串类型和数值类型的形参。 2、当传送数值常数时,如果实参表中的某个数值常数与function和 sub过程形参表相应的形参不一致,则把这个常数被强制变为相应 形参的类型。 3、当作为实参的数值表达式与形参类型不一致时,通常也强制变为 相应的类型。
通用过程与事件过程
事件过程是一种特殊的sub过程,它附加在窗体和控件上。一个控件 的事件过程由控件的实际名字、下划线和事件名组成。而窗体事件 过程由form、下划线和事件名组成。窗体的事件过程不能由用户任 意定义,而有系统指定。 事件过程的一般格式为: [private|public] sub 控件名_事件名(参数表) 语句组 end sub 通用过程可以放在标准模块和窗体模块中,而事件过程只能放在窗体 模块中。当过程名唯一时可以直接通过过程名调用,如果两个或两 个以上的标准模块中含有相同的名字时,则在调用时必须用模块名 限定。一般格式: 模块名.过程名(参数表)
传值
4、用function过程可以通过过程名返回值,只能返回一个值,sub过 程可以通过参数返回多个值,如果通过sub过程返回值时相应的参 数要用传地址方式。
数组参数的传送
在VB中允许把数组作为实参传送到过程中。例如: sub S(a(),b()) …… end sub 在上面语句中两个数组作为形参,需要在数组名后面加上一对括号, 以免与普通变量混淆。可以用下面语句调用: call S(a(),b()) 当用数组作为过程的参数时使用的是传地址方式,而不是传值方式。 注意事项: 1、为了把一个数组的全部元素传送给一个过程,应将数组名分别放入 实参表和形参表中,并略去数组的上下界,但是括号不能省略。 例子:代码见数组传送.vbp
相关文档
最新文档