论坛: 编程破解 标题: Visual basic 过程 复制本贴地址    
作者: ypy [ypy]    见习版主   登录
以下是我以前自学Visual Basic时为学习方便自己归纳打印的稿子,发上来希望对刚学习Visual Basic的网友有所帮助。:)

                                   Visual basic 过程
VB中使用的过程分为子程序过程(Sub Procedure)、函数过程(Function Procedure)和属性过程(Property Procedure)。其中:
Sub过程不返回值;
Function过程返回一个值;
Property过程可以返回和设置窗体、标准模块以及类模块的属性值,也可以设置对象的属性。
(一) Sub过程
在VB中有两种Sub过程,即事件过程和通用过程。
1. 事件过程
事件过程分为窗体事件过程和控件事件过程
定义窗体事件过程:
    Private Sub Form_事件名([参数列表])
        [局部变量和常数声明]
        语句块
    End Sub
说明:
(1) 窗体事件过程名由Form、下划线和事件名结合而成。如果使用多文档界面(MDI),则由“MDIForm”、下划线和事件名构成窗体事件过程名。
(2) 每过窗体事件过程名前都有一个“Private”的前缀,表示该事件过程不能在它自己的窗体模块之外被调用。
(3) 事件过程中有无参数,完全由VB提供的具体事件本身决定,用户不可以随意添加。
定义控件事件过程
    Private Sub 控件名_事件名([参数列表])
        [局部变量和常数声明]
        语句块
    End Sub
说明:控件事件过程名由控件名、下划线和事件名组成。
2. 通用过程
通用过程分为公有(Public)过程和私有(Private)过程两种。公有过程可以被应用程序中的任一过程调用。通用过程可以存储在窗体模块或标准模块中。
定义Sub过程:
    [ Private | Public ] [ Static ] Sub过程名 ([ 参数列表 ])
        [局部变量和常量声明]
        语句块
        [Exit Sub]
        语句块
    End Sub
说明:
(1) 在Sub和End Sub之间是描述过程操作的语句块,称为子程序体和过程体。在Sub语句之后,可以用Dim或Static语句声明过程的局部变量和常量
(2) 以Private为前缀的Sub过程是窗体级的(私有的)过程,只能被本窗体模块内的事件过程或其他过程调用。以Public为前缀的Sub过程是应用程序级的(公有的或全局的)过程,这样的过程可以从项目中的任何模块中调用他。缺省为Public。若在一个窗体模块调用另一个窗体模块中的公有过程时,必须以“窗体名.公有过程名”的形式调用公有过程。
(3) Static指定过程中的局部变量为“静态”变量。
(4) 在同一模块中,同一符号名不能既用作Sub过程名,又用作Function过程名。
(5) 形式参数格式为:[ByVal] 变量名 [()] [As 数据类型]       变量名后有括号表示该形参是数组。
(6) End Sub:标志Sub过程的结束,当程序执行到End Sub语句时,退出该过程,并立即返回执行调用该过程语句的下一条语句。
(7) 过程中可以含有多个Exit Sub语句,程序执行到Exit Sub语句时提前退出该过程,返回到调用该过程语句的下一条语句。
(8) Sub过程不能嵌套定义,即在Sub过程中不可以再定义Sub过程或Function过程,但可以嵌套调用。
(二) Function过程
Function过程语法:
    [ Private | Public ] [Static ] Function 函数名 ([参数列表]) [ As 数据类型 ]
        [局部变量和常量声明]
        [语句块]
        [函数名=表达式]
        [Exit Function]
        [语句块]
        [函数名=表达式]
    End Function
(1) Function过程以Function语句开头,以End Function语句结束。在其间是描述过程操作的语句,称为函数体或过程体。
(2) 函数名命名规则与变量名命名规则相同。在函数体内,可以像使用简单变量一样使用函数名。
(3) As数据类型:Function过程要由函数名返回一个值。使用As数据类型选项指定函数类型。缺省为“Variant”类型。
(4) 在函数体内用“函数名=表达式”语句给函数名赋值。若在Function过程中缺省给函数名赋值的语句,则该Function过程返回对应类型的缺省值。
(5) 在函数体内可以含有多个Exit Function语句,程序执行Exit Function语句时,提前结束Function过程,返回调用点。
(6) Function不能嵌套定义。
(三) 过程调用
1. 事件过程的调用
事件过程由一个发生在VB中的事件来自动调用或者由同一模块中的其他过程显式调用。例:
Option Explicit
Private Sub Form_Load()       ‘由事件自动调用
    Call Move((Screen .Width-Width)/2 ,(Screen .Height-Height)/2)
End
Private Sub Form_Activate()    ‘由事件自动调用
    Label1.Caption=”欢迎使用Visual Basic”
End Sub
Private Sub Command1_Click()
    Dim Flg As Integer , L As Boolean
    Call Form_Unload(Flg)          ‘由Command1_Click显式调用
End Sub
Private Sub Form_Unload(Cancel As Integer)
    If MsgBox(“Are you sure?”,vbYesNo,”退出”)=6 Then
        Unload Me
    Else
        Cancel=1
    End If
End Sub
2.Sub过程调用
       Sub过程和Function过程必须在事件过程或其他过程中显式调用,否则过程代码永远不会被执行。VB用两种方式调用Sub过程。一种是把过程名放在Call语句中,一种是把过程名作为一个语句来使用。
(1) 用Call语句调用Sub过程
调用Sub过程语法如下:
Call 过程名 (实在参数表)
说明:
<1>执行Call语句,VB将控制传递给由“过程名“指定的Sub过程,开始执行他。
<2>实参是传送给被调用的Sub过程的变量、常数或表达式。如果被调用的程序是一个有参过程,在一般情况下,实参的个数、类型和顺序,应与被调用过程的形参相匹配。有多个参数时各实参之间用逗号分隔。如果被调用过程是一个无参过程,则括号均可省略。
例: Call Area(A,B,C,S)
(2) 把过程名作为一个语句来用
调用过程的语法如下:
过程名  [实参1[,实参2]]
与第一种方式相比,它有两点不同:
<1>去掉关键字Call;
<2>去掉“实在参数表的括号。
例: Area A,B,C,S
3.Function过程调用
          调用Function过程和调用VB内部函数的方法一样,即在表达式中写出他的名称和相应的实参。
      调用Function过程语法如下:
          Function 过程名([实在参数表])
      说明:
      <1>调用Function过程与调用Sub过程不同,必须给参数加上括号,即使调用无参函数括号也不能省略。
      <2>VB也允许像调用Sub过程那样调用Function过程。
          例如,用Private Function Exam( A As Integer)定义了一个Function过程,可以用下面两种方法调用:
          Call Exam(Inx)
      或
          Exam Inx
      用这两种方法调用函数时VB放弃返回值。
   4.调用其他模块中的过程
      <1>窗体模块中的过程:
          从窗体模块的外部调用窗体中的公有过程,必须以窗体的名字作为调用前缀,指明包含该过程的窗体模块。即用
              〈包含该过程的窗体模块名〉.〈过程名〉
      作为调用名来调用对应的过程。
      <2>标准模块中的过程:
          如果过程名是唯一的即在应用程序中不再有同名过程存在,则调用该过程时不必加模块名。否则同上。
      <3>类模块中的过程
          调用类模块的公有过程时,要求用指向该类某一实例的变量修饰过程。即要首先声明类的实例为对象变量,并以此变量作为过程名前缀修饰词,不可直接用类名作为前缀修饰词。
(四) 参数的传递
1. 形参与实参
<1>形参
出现在Sub过程和Function过程的形参表中的变量名、数组名称为形式参数,过程被调用之前,并未为其分配内存,其作用是说明自变量的类型和形态以及在过程中所扮演的角色。形参可以是:
1) 除定长字符串变量之外的合法变量名
2) 后面跟有左右圆括号的数组名
<2>实参
实参是在调用Sub或Function过程时,传送给相应过程的变量名、数组名或表达式,他们包含在过程调用的实参表中。在过程调用传递参数时,形参表和实参表中的对应变量名可以不必相同,因为“形实结合”是按“位置”结合,而不是按“名字”结合。
2. 参数的传递
在VB中传递参数有两种方式,即按值传递(Passed by Value)和按地址传递(Passed by Reference)。其中按地址传递习惯上称为“引用”。
<1>按值传递参数
过程调用时,VB给按值传递参数分配一个临时存储单元。将实参变量的值拷贝到这个临时单元中去。也就是说,按值传递参数时,传递的只是实参变量的副本。如果在被掉过程中改变了形参值,只影响副本,而不会影响实参变量本身,即当返回调用程序时,实参变量保持调用前的值不变。
<2>按地址传递参数
在定义过程时,若形参名前面没有关键字“ByVal”,即形参名前面缺省修饰词,或带有关键字“ByRef”时,则指定了他是一个按地址传递的参数。按地址传递参数时,把实参变量的地址传给被调过程因此实参变量和形参变量共享同一存储单元。这样在被调过程中的形式参数值一旦被改变,相应的实参值也就跟着被改变了。
注意:对于按地址传递的形参,如果在过程调用时与之结合的实参是一个常数或者表达式,那么VB就会用“按值传递”的方式来处理他。
3. 数组参数
定义过程时,VB允许把数组作为形参出现在形参表中,声明数组参数的格式是:
形参数组名()[As 数据类型]
      形参数组只能是按地址传递的参数。对应实参也必须是数组,且数据类型必须和形参数组的数据类型一致。调用过程时把要传递的数组名放在实参表中即可,数组名后面不跟圆括号。在过程中不可以用Dim语句多形参数组进行声明,否则产生“重复声明”的编译错误。但是,在使用动态数组时,可以用ReDim语句来改变形参数组的维界,重新定义数组的大小。当返回调用程序时,对应实参数组的维界也跟随发生变化。
      示例:
          Option Explicit
          Option Base 1
          Private Sub Form_Click()
              Dim Arraya() As Integer , I As Integer
              ReDim Arraya(5)
              Print “调用前数组维上界是:”; Ubound(Arraya)
              Call Changedim(Arraya)
              Print “调用后数组维上界是:”; Ubound(Arraya)
              Print “数组各元素值是:”;
              For I=1 To UBound(Arraya)
                  Print Arraya(I)
              Next I
              Print
          End Sub
          Private Sub Changedim(A() As Integer)
              Dim I As Integer
              ReDim Preserve A(7)
              For I=1 To 7
                  A(I)=I
              Next I
          End Sub
      程序运行结果如下:
      调用前数组维上界是:5
      调用后数组维上界是:7
      数组各元素值是:1 2 3 4 5 6 7
(五) 变量的作用域
1. 过程级变量
2. 模块级变量
3. 全局变量
声明全局变量,应该在模块的声明(General)(Declarations)部分使用Public而不是Dim或Private语句声明变量。通常做法是添加一个标准模块(Module),把所有的全局变量全放在它的声明部分,程序执行时可将工程属性的启动对象设置成Sub Main。




地主 发表时间: 11/24 23:25

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号