《教育专题:《VB程序设计初步》课件1 (2).ppt》由会员分享,可在线阅读,更多相关《教育专题:《VB程序设计初步》课件1 (2).ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章 VB程序设计第四章 VB程序设计在设计一个规模较大、功能较复杂的程序时,需在设计一个规模较大、功能较复杂的程序时,需要按功能将程序分解成若干个相互独立的部件,要按功能将程序分解成若干个相互独立的部件,VB称这些部件为过程。称这些部件为过程。在程序编写时,分别对每个在程序编写时,分别对每个“过程过程”编写程序,编写程序,可以简化程序设计任务。可以简化程序设计任务。本章主要对工程、模块和过程进行介绍。本章主要对工程、模块和过程进行介绍。4.1 文件类型VB应用程序由扩展名为.vbp、.frm、.frx、.bas、.cls等几种类型的文件组成。1.窗体文件(.frm)包含窗体、控件的描述和属
2、性设置,也包含窗体级的常数、变量、外部过程的声明,以及事件过程和一般过程。如果程序没有frm窗体文件,则表示没有用户界面。2.窗体的二进制数据文件(.frx)含有窗体上控件的二进制属性数据。这些文件是在创建窗体时自动产生的。4.1 文件类型3.标准模块文件(.bas)用于存放几个窗体中都需要用的公共代码,包含常数、类型、变量和过程的声明,以及过程代码。4.类模块文件(.cls)用于建立新对象,这些新对象可以包含自定义的属性和方法。类模块即包含代码又包含数据,可被应用程序内的过程调用。4.1 文件类型5.工程文件(.vbp)工程文件包含组成应用程序的所有窗体文件(.frm)、模块文件(.bas)
3、和其它文件,也包含环境设置选项方面的信息。工程的操作:打开和保存工程:通过“文件”菜单进行打开和保存工作设置工程属性:“工程”菜单,“工程属性”对话框操作添加工程:工具栏或“文件”菜单添加已有工程或新建工程添加多个工程可组成工程组删除工程:“工程资源管理器”中通过右键快捷菜单向工程中添加和删除文件:工具栏或“工程”菜单4.2 过程将较为复杂的程序分割成较小的逻辑部件,这些部件称为过程。u每个过程为一段程序,一个过程可以被另一个过程调用。u多个过程构成一个完整、复杂的应用程序。u将应用程序分解成过程进行分别调试,可极大地简化程序设计任务。4.2 过程应用程序工程文件窗体文件多个过程标准模块文件多
4、个过程类模块文件多个过程工程文件应用程序的组成:4.2 过程过程的分类:u子程序过程(Sub Procedure)子程序过程没有返回值u函数过程(Function Procedure)函数过程具有返回值,如asin(x)u属性过程(Property Procedure)属性过程可以返回和设置窗体、标准模块和类模块,也可以设置对象的属性。VB的所有可执行代码必须属于某个过程。的所有可执行代码必须属于某个过程。过程的定义是平行的,不能在一个过程中定义其它过程。过程的定义是平行的,不能在一个过程中定义其它过程。4.2.1 Sub过程(子程序过程)Sub过程可以放在标准模块和窗体模块中。VB中有两种S
5、ub过程:u事件过程u通过过程1.事件过程VB是事件驱动的,为一个事件所编写的程序代码,称为事件过程。当VB对象中的某个事件发生时,自动调用相应的事件过程。事件过程分为窗体事件过程和控件事件过程。4.2.1 Sub过程(子程序过程)(1)窗体事件过程的语法:Private Sub Form_事件名 (参数列表)局部变量和常数声明 语句块End Sub例如:Private Sub Form_Click()frmText.Show Hide End Sub注意:p不管窗体的名称(Name)属性是什么,在事件过程中只能使用“Form_事件名”p在程序代码中对窗体的引用须要使用窗体的名称属性p在程序有
6、多个窗体时,如何对不同窗体的窗体事件编程?将要进行编程的窗体放在屏幕最前端(或在工程资源管理器中选中窗体),再点击工程资源管理器中的“查看代码”按钮;在代码窗口的标题栏中显示代码对应的窗体。4.2.1 Sub过程(子程序过程)(2)控件事件过程的语法:Private Sub 控件名_事件名 (参数列表)局部变量和常数声明 语句块End Sub例如:例如:Private Sub Command1_Click()Text2=Text1*Text1*3.14 End Sub4.2.1 Sub过程(子程序过程)(3)事件过程的创建方法:u在设计的窗体上双击窗体或控件,打开“代码编辑器”窗口,并会出现该
7、窗体或控件的默认过程代码。u单击工程资源管理器窗口的“查看代码”按钮,在对象列表框选择对象,在“过程列表框”选择事件过程。u根据语法要求,自己编写事件过程。4.2.1 Sub过程(子程序过程)1.通用过程当几个不同的事件过程需要执行同样的动作时,为了不重复编写代码,可以采用通用过程来实现。u要运行通用过程中的代码,需要在事件过程对通用过程进行调用。u通用过程可以保存在窗体模块(.frm)和标准模块(.bas)两种模块中。u在VB中,事件过程是必要的,但通用过程不是必要的,是为了程序员方便而单独建立的。4.2.1 Sub过程(子程序过程)(1)通用过程的语法:Private和Public:用来声
8、明该Sub过程是局部的(Private),还是全局的(Public),系统默认值为PublicStatic:表示局部静态变量。“静态”是指在过程运行结束后仍保留Sub过程的变量值。过程名:根据该通用过程的功能,程序员自己定义的名字。与变量的命名规则相同,在同一模块中过程名不能重名。Private|Public Static Sub 过程名过程名(参数列表参数列表)局部变量和常数声明局部变量和常数声明 语句块语句块Exit Sub语句块语句块End Sub4.2.1 Sub过程(子程序过程)(1)通用过程的语法:局部变量和常数声明:用来声明过程中定义的变量和常数,可用Dim等语句声明。Exit
9、Sub:使程序立即从一个Sub过程中退出,一般放在分支结构代码中。语句块:过程中执行的操作,称为子程序或过程体。End Sub:用于结束本Sub过程。注意:Exit Sub与End Sub是结束本Sub过程,不是结束应用程序的运行Private|Public Static Sub 过程名过程名(参数列表参数列表)局部变量和常数声明局部变量和常数声明 语句块语句块Exit Sub语句块语句块End Sub4.2.1 Sub过程(子程序过程)参数列表:类似于变量的声明,列出从调用过程传递来的函数值,称为形式参数(简称形参),多个形参间用“,”隔开。形参语法:ByVal|ByRef 变量名 ()As
10、 数据类型ByVal:表示该参数按值传递ByRef:表示该参数按地址传递(默认值)Private|Public Static Sub 过程名过程名(参数列表参数列表)局部变量和常数声明局部变量和常数声明 语句块语句块Exit Sub语句块语句块End Sub注意:即使Sub过程中的参数列表为空,过程名后的括号也不能省略【例例Ex_Telephone】Private Sub Form_Load()Dim i As Integer For i=1 To 9 Load Command1(i)Command1(i).Visible=True Command1(i).Caption=i Command1
11、(i).Left=Command1(0).Left+800*i If i 4 Then Command1(i).Top=Command1(0).Top+800 Command1(i).Left=Command1(0).Left+800*(i-5)End If Next iEnd SubPrivate Sub Command1_Click(Index As Integer)Text1.Text=Text1.Text&Command1(Index).CaptionEnd Sub4.2.1 Sub过程(子程序过程)Public Sub Warning (Byval f As integer)End
12、Sub Private|Public Static Sub 过程名过程名(参数列表参数列表)局部变量和常数声明局部变量和常数声明 语句块语句块Exit Sub语句块语句块End SubPrivate Sub Warning (f As integer)End Sub 例如:例如:注意:注意:Sub过程不能嵌套定义过程不能嵌套定义Public Sub Warning (Byval f As integer)Private Sub Welcome()End Sub End Sub 4.2.1 Sub过程(子程序过程)(2)通用过程的创建方法:方法一:打开“代码编辑器”窗口后,点击“工具”菜单的“添
13、加过程”命令方法二:在“代码编辑器”窗口中手动创建4.2.2 Function过程VB系统提供了诸多内部函数,如sin()、Date()、Left()等等。用户可以利用Function过程编写自己的函数过程。Private|Public Static Function 函数名函数名(参数列表参数列表)As 数据类型数据类型 局部变量和常数声明局部变量和常数声明 语句块语句块函数名表达式函数名表达式Exit Function语句块语句块函数名表达式函数名表达式End Function注意:与Sub过程一样,Function过程也是一个独立的过程;与Sub过程不同的是,Function过程可以返回
14、一个值到调用的过程Private|Public Static Sub 过程名过程名(参数列表参数列表)局部变量和常数声明局部变量和常数声明 语句块语句块Exit Sub语句块语句块End Sub4.2.2 Function过程Private|Public Static Function 函数名函数名(参数列表参数列表)As 数据类型数据类型 局部变量和常数声明局部变量和常数声明 语句块语句块函数名表达式函数名表达式Exit Function语句块语句块函数名表达式函数名表达式End FunctionAs 数据类型:函数返回值的数据类型,例如sin()函数的返回值为Double型。若省略“As子
15、句”,默认类型为Variant型。语句块:描述过程的操作,称为子函数体或函数体。函数名表达式:在函数体中用该语句给函数赋值。如果在Function过程中省略该语句,则返回值为数据类型的默认值。例如,数值函数返回0;字符函数返回空字符串。4.2.2 Function过程Private|Public Static Function 函数名函数名(参数列表参数列表)As 数据类型数据类型 局部变量和常数声明局部变量和常数声明 语句块语句块函数名表达式函数名表达式Exit Function语句块语句块函数名表达式函数名表达式End FunctionExit Function语句:提前退出Functio
16、n过程。在退出函数过程之前,必须保证为函数赋值,否则出错。4.2.2 Function过程Function过程实例:计算直角三角形的斜边长度过程实例:计算直角三角形的斜边长度 Function Hypotenuse (A As Integer,B As Integer)As IntegerHypotenuse=Sqr(A2+B2)End Function实例中:lA、B为两个整型的形式参数lHypotenuse函数的返回值为一个整型数l函数体为赋值语句,计算两个形参平方和的平方根4.3过程的调用Private Sub Command1_Click()Dim Y As Double,F As D
17、ouble F=Sin(10)Y=Sin(Val(Text1.Text)Text2.Text=YEnd Sub语句1语句2过程1调用语句语句3语句4语句1语句2过程2调用语句语句3End 过程1语句1语句2语句3End 过程2事件过程事件过程过程过程1代码代码过程过程2代码代码过程调用的程序执行顺序:过程调用的程序执行顺序:4.3.1 调用Sub事件过程调用Sub过程是一个独立的语句。Sub事件过程可由事件自动调用,或在同一模块中的其它过程中使用调用语句调用。调用Sub过程的方法:1.使用Call语句语法:Call 过程名 (参数列表)2.直接使用过程名语法:过程名 参数列表l参数列表:在调用
18、语句中的参数称为实在参数(简称实参)。实参可以是变量、常数、数据和表达式。l使用Call语句调用时,参数必须在括号内;没有参数时,括号可省略。用过程名调用,没有参数时必须省略参数两边的括号l执行调用语句时,VB将控制传递给被调用的Sub过程。4.3.1 调用Sub事件过程Private Sub txtInput_LostFocus()If IsNumeric(txtInput)=True Then MsgBox 输入的是数值输入的是数值,vbOKOnly,输入输入 Else MsgBox 输入的是文字输入的是文字,vbOKOnly,输入输入 End IfEnd SubPrivate Sub c
19、mdCheck_Click()Call txtInput_LostFocusEnd SubPrivate Sub cmdEnd_Click()EndEnd Sub【例Ex_CheckN1】4.3.2 调用Sub通用过程Sub Warning()If IsNumeric(txtInput)=True Then MsgBox 输入的是数值,vbOKOnly,输入 Else MsgBox 输入的是文字,vbOKOnly,输入 End IfEnd SubPrivate Sub cmdCheck_Click()Call WarningEnd SubPrivate Sub txtInput_LostFoc
20、us()WarningEnd Sub【例Ex_CheckN2】注意:VB程序是事件驱动的,Sub通用过程只有在被其它事件过程直接或间接调用时才会被执行,否则不会被执行。4.3.3调用Function过程调用函数Function过程的方法与调用VB内部函数方法一样,在语句中直接使用函数名,Function过程可以返回一个值到调用的过程。例如:Function Hypotenuse (A As Integer,B As Integer)As Integer Hypotenuse=Sqr(A2+B2)End Function Private Sub Form_Click()Print 10*Hypo
21、tenuse(3,4)X=Hypotenuse(3,4)If Hypotenuse(3,4)=10 Then Print“Error”End Sub4.3.3调用Function过程采用调用Sub过程的语法也能调用Function过程,当用这种方法调用过程时,放弃Function过程的返回值。调用Sub过程的方法:1.使用Call语句语法:Call 过程名 (参数列表)2.直接使用过程名语法:过程名 参数列表例如:P=MsgBox(“输入的是数值”,vbOKOnly,“输入)MsgBox“输入的是数值”,vbOKOnly,“输入”Function Hypotenuse (A As Intege
22、r,B As Integer)As Integer Hypotenuse=Sqr(A2+B2)End Function Private Sub Form_Click()Print 10*Hypotenuse(3,4)X=Hypotenuse(3,4)If Hypotenuse(3,4)=10 Then Print“Error”End Sub4.4 参数的传递在调用一个有参数的过程时,参数是在本过程有效的局部变量,通过“形参和实参结合”传递信息。u实现调用过程的实参与被调用过程的形参之间的数据传递。u数据有按值传递和按地址传递两种方式。1.形参:在被调用过程中的参数是形参。2.实参:是在主调过程
23、中的参数。4.4.1 形参和实参语句1语句2过程1调用语句语句3语句4语句1语句2语句3End 过程14.4.1 形参和实参l在过程定义语句中的参数列表为形参列表,在过程被调用之前,形参未被分配内存,只是说明形参的类型和在过程中的作用l在过程调用语句中的参数列表为实参列表,在过程调用时实参将数据传递给形参例如:Function Hypotenuse (A As Integer,B As Integer)As Integer Hypotenuse=Sqr(A2+B2)End Function Private Sub Form_Click()Dim x As Integer,y As Intege
24、r,C As integer x=Val(Text1):y=Val(Text2)C=Hypotenuse(x,y)End Sub4.4.1 形参和实参l形参列表和实参列表的对应变量名可以不同。l实参与形参的个数、顺序和数据类型必须相同。l形参与实参的数据传递是按位置结合的,即第1个实参与第1个形参结合,第2个实参与第2个形参结合,依此类推。l形参与实参必须是一一对应的关系,否则编译出错。例如:Function Hypotenuse (A As Integer,B As Integer)As Integer Hypotenuse=Sqr(A2+B2)End Function Private Su
25、b Form_Click()Dim x As Integer,y As Integer,C As integer x=Val(Text1):y=Val(Text2)C=Hypotenuse(x,y)End SubC=Hypotenuse(x):D=Hypotenuse(x,y,10)4.4.1 形参和实参例如:Function Hypotenuse (A As Integer,B)As Integer Hypotenuse=Sqr(A2+B2)End Function Private Sub Form_Click()Dim x As Single,y As Single,C As intege
26、r x=10.5:y=5.8 C=Hypotenuse(10.5,5.8)C=Hypotenuse(x,y)End Subl如果没有声明形参的数据类型,则默认为Variant型数据。l对于实参数据类型那个与形参不一致时,VB会先将实参进行数据转换,然后将转换值传递给形参。注意:这种数据转换只适用于常量的转换。4.4.1 形参和实参l形参可以使用可选参数,在参数列表中使用Optional关键字。当使用可选参数后,形参与实参不必一一对应,在实参列表中缺省的参数取值为该数据类型的默认值。l形参与实参是相对的概念。例如:Function Hypotenuse (Optional A As Intege
27、r,Optional B As Integer)As Integer y=Sin(A)Hypotenuse=Sqr(A2+B2)End Function Private Sub Form_Click()Dim x As Integer,y As Integer,C As integer x=Val(Text1):y=Val(Text2)C=Hypotenuse(x,y)End SubC=Hypotenuse(x):C=Hypotenuse(,x)4.4.2 参数按值传递和按地址传递在VB程序进行过程调用时,参数的传递有按值传递(Passed By Value)和按地址传递(Passed By
28、Reference)两种方式。1 按值传递参数l参数按值传递使用ByVal关键字。例如:Public Sub Warning (Byval f As integer)End Sub 4.4.2 参数按值传递和按地址传递1 按值传递参数l按值传递参数时,VB给传递的形参分配一个临时的内存单元,将实参的值传递到这个临时单元。l实参向形参传递是单向的。如果在被调用过程中改变了形参值,不会影响实参变量本身。l当被调用过程结束返回主调过程时,VB将释放形参的临时存储单元。4.4.2 参数按值传递和按地址传递Private Sub cmdStart_Click()Dim a,b,c As Integer
29、a=Val(txtA.Text)b=Val(txtB.Text)txtMax=Max(a,b)txtResultA.Text=a txtResultB.Text=bEnd SubPrivate Function Max(ByVal x As Integer,ByVal y As Integer)Dim z As Integer If x y Then z=x :x=y :y=z End If Max=x txtX.Text=x :txtY.Text=yEnd Function【例例Ex_Max】4.4.2 参数按值传递和按地址传递2 按地址传递参数l定义按地址传递参数可使用ByRef关键字,或
30、不使用关键字。例如:Public Sub Warning (ByRef f As integer)End Sub Public Sub Warning (f As integer)End Sub 4.4.2 参数按值传递和按地址传递2 按地址传递参数l按地址传递参数,是指把形参变量的内存地址传递给被调用的过程。形参、实参具有相同的地址,即形参、实参共享同一段存储单元。l在被调用过程中改变形参的值,则相应实参的值也被改变。l如果在过程调用语句中的实参是参数或表达式,则VB用按值传递的方法处理。4.4.2 参数按值传递和按地址传递Private Function Max(x As Integer,
31、y As Integer)Dim z As Integer If x 0 Multiply=Multiply*n n=n-1 LoopEnd FunctionPrivate Sub Form_Click()Dim Sum As Integer,i As Integer For i=3 To 1 Step-1 Sum=Sum+Multiply(i)Next i Print Sum=;SumEnd Sub4.4.3 数组参数数组参数是指在定义过程时,可以定义数组作为过程的形参。l语法:形参数组名形参数组名()As 数据类型数据类型l形参为数组时,过程调用时的实参必须也是数组。l实参列表中的数组不需
32、要用“()”。l数组的参数传递只能按地址传递,形参与实参共用同一段内存单元。4.4.3 数组参数【例例Ex_AverScore】计算正式员工和临时员工的平均工资计算正式员工和临时员工的平均工资Private Sub cmdStart_Click()Dim Salary1(5)As Single,Salary2(8)As Single Salary1(0)=1900:Salary1(1)=1970:Salary1(2)=1915 Salary1(3)=1600:Salary1(4)=1655 Salary2(0)=2675:Salary2(1)=2780:Salary2(2)=2715 Sala
33、ry2(3)=2540:Salary2(4)=2990 Salary2(5)=2770:Salary2(6)=2895:Salary2(7)=2765 txtS1.Text=Int(Average(Salary1,5)*100)/100 txtS2.Text=Int(Average(Salary2,8)*100)/100End SubPrivate Function Average(stuArray()As Single,n As Integer)As Single Dim i As Integer Dim aver As Single,sum As Single For i=0 To n-1
34、 sum=sum+stuArray(i)Next i aver=sum/n Average=averEnd Function赋初始初始值Salary1为临时员工工Salary2为正式正式员工工调用用Average函数函数计算平均工算平均工资,并,并在文本框中在文本框中显示示计算工算工资总和和4.4.4对象参数VB中对象也可以作为形参,将对象向被调用过程传递。l对象的传递只能按地址传递。l对象的类型声明为“Control”或控件类型,如:“Lable”、“Form”。4.4.4对象参数Private Sub cmdEmployee_Click(Index As Integer)Call frmS
35、elect(frmSecond,cmdEmployee(Index).Caption)Call labSelect(frmSecond.Label1,cmdEmployee(Index).Caption)End SubPrivate Sub frmSelect(F As Form,cmdCap As String)F.Caption=cmdCap&人员管理End SubPrivate Sub labSelect(L As Label,cmdCap As String)L.Caption=欢迎进入&Chr(13)&cmdCap&人员管理 L.FontSize=16 L.FontBold=True
36、 L.Visible=True frmSecond.Show frmFirst.HideEnd Sub【例例Ex_FormArgu1】创建两个窗体的人员管理系统创建两个窗体的人员管理系统4.5 递归过程在VB中Sub过程可以进行递归调用,即在过程中可以直接或间接地调用过程本身。Private Function FNC(x as Integer)Dim y As Integer,z As Single zFNC(y)End Function这种递归结构会使过程进入无限死循环?这种递归结构会使过程进入无限死循环?递归程序的编程方法:递归程序的编程方法:确定递归公式确定递归公式递归的结束条件递归的结
37、束条件 采用条件结构编写程序采用条件结构编写程序4.5 递归过程【例例Ex_MulN1】计算计算n的阶乘的阶乘1 递归的形式 n!=n(n-1)(n-2)21 可以写成:n!=n(n-1)!(n-1)!=(n-1)(n-2)!递归公式为:n!=n(n-1)!2 递归的结束条件 n0或1时 n!=14.5 递归过程【例例Ex_MulN1】计算计算n的阶乘的阶乘Private Sub Form_Click()Dim M As Integer,i As Integer i=InputBox(请输入一个正整数)M=Muln(i)Print M=;MEnd SubPrivate Function Mul
38、n(n As Integer)As Integer If n=0 Or n=1 Then Muln=1 Else Muln=Muln(n-1)*n End IfEnd FunctionPrivate Function Muln(n As Integer)As Integer Select Case n Case 0 Or 1 Muln=1 Case Is 1 Muln=Muln(n-1)*n End SelectEnd Function4.6 变量和过程的作用范围4.6.1 变量的作用范围变量的作用范围是指变量有效的范围。在VB中可分为过程级变量、模块级变量和全局变量三种。1 过程级变量:过程
39、级变量只在声明它们的过程中才有效,也称为局部变量。用户无法在其他过程中访问或改变变量的值。过程级变量的定义方法:Dim 变量名 As 数据类型 Static 变量名 As 数据类型4.6.1 变量的作用范围Private Function Max(x As Integer,y As Integer)Dim z As Integer If x y Then z=x :x=y :y=z End If Max=x txtX.Text=x :txtY.Text=yEnd Functionl对于临时的计算,适合声明为局部变量。l不同过程中的局部变量可以重名。l在过程中使用Dim语句定义的变量都是局部变量
40、。4.6.1 变量的作用范围2 模块级变量:模块级变量对该模块的所有过程都有效。在模块中的任何过程都可以使用该变量。模块级变量的定义方法:Dim 变量名 As 数据类型 Private 变量名 As 数据类型4.6.1 变量的作用范围3 全局变量:全局变量的作用范围是应用程序的所有过程,也称为共用变量。全局变量的定义方法:Public 变量名 As 数据类型4.6.1 变量的作用范围【例例Ex_FormArgu2】人员管理系统人员管理系统【例例Ex_FormArgu2】人员管理系统人员管理系统首先创建2个窗体文件和一个标准模块文件。给全局全局变量量赋值窗体窗体2内内标签控件控件显示的内示的内容
41、容窗体窗体2标题栏显示示的内容的内容计算平均算平均值的函数的函数过程程4.6.2 静态变量变量除了作用范围外,还有存活期的概念,即变量能够保持其值的时间。l模块级变量和全局变量的存活期是整个应用程序的运行期间。l在过程中用Dim语句定义的局部变量仅当本过程执行期间存在。当过程执行完毕,变量的存储空间被释放,在下一次执行该过程时所有局部变量将重新初始化。l可以使用Static语句将局部变量定义为静态局部变量,这样过程结束后保留变量的值,即不释放变量占用的内存单元。Static Ss As IntegerDim Tt As Double4.6.2 静态变量【例例Ex_Plus】Private St
42、atic Function Fac(n As Integer)Dim f As Integer f=f+n Fac=fEnd FunctionPrivate Sub Form_Click()Dim i As Integer For i=1 To 5 Print;i&=&Fac(i)Next iEnd Subl在过程定义语句中使用Static关键字,则过程中定义的所有变量为静态局部变量。l在点击窗体的事件过程中,通过For 循环结构共调用了5次Fac函数过程。因为采用了静态变量,每次调用结束后,f的值被保留。若定义的不是静态变量运行结果不同。l将f设为模块级变量,运行结果相同。但模块内所有过程都
43、能对f值进行修改,故容易出错。4.6.3 过程的作用范围1 过程的有效范围:Sub过程和Function过程的作用范围有全局过程和局部过程2种。通过Public和Private关键字定义。Private Sub 过程名(参数列表)仅在本模块才能访问Public Sub 过程名(参数列表)程序的所有模块都能访问4.6.3 过程的作用范围2 过程的外部调用:外部调用是指调用其他模块中的全局过程。(1)调用窗体模块中的过程:必须以窗体名作为调用的前缀语法:Call 窗体名.全局过程名 (实参列表)例如:在窗体Form2中定义一个全局过程Sub1,在窗体1中调用该过程。Private Sub Form
44、_Click()Call Form2.Sub1End Sub4.6.3 过程的作用范围(2)调用标准模块中的过程:语法:Call 标准模块名.全局过程名 (实参列表)l若在程序中过程名是唯一的,则调用时不用加模块名。l若两个标准模块中含有同名的全局过程,则在模块外调用必须加标准模块名作为前缀。例如:Call Module2.Sub14.6.4 使用同名的变量在VB中允许不同应用范围内使用多个同名的变量,例如不同过程中出现同名的局部变量,局部变量与模块变量同名等情况。1 不同模块中的全局变量同名:如果不同模块中的全局变量使用同一名字,在引用时需要用“模块名.变量名”引用。例如:标准模块Modul
45、e1Public Ss As IntegerSs=1Module2.Ss=2标准模块Module2Public Ss As IntegerSs=1Module1.Ss=24.6.4 使用同名的变量2 全局变量与局部变量同名:全局变量与局部变量同名时,局部变量在其所在过程内有效;在其他范围内全局变量有效。例如:窗体模块Form1Private Sub Form_Click()Dim Ss As Integer Ss=1End SubPrivate Sub cmd1_Click()Ss=1End Sub标准模块Module2Public Ss As IntegerSs=14.6.4 使用同名的变量
46、3 窗体的属性、控件名与变量同名:在VB中窗体的属性名、控件名被视为模块级变量,故不能与模块级变量同名。当某一过程内的局部变量与控件名或属性名同名时,在使用该控件时必须加窗体名或Me关键字来限定。例如:在窗体中有个名称为Text1的文本框,和一个同名的局部变量。Private Sub Form_Click()Dim Text1 Text1=“Variable”Me.text1=“Control Form1.text1.Top=0End Sub4.7 Sub Main过程与快速提示窗体1.通过Sub Main过程启动应用程序当应用程序启动时不加载任何窗体,可在标准模块中创建一个Sub Main的
47、子过程,然后在Sub Main 过程中编写启动时需要执行的代码。lSub Main子过程不能在窗体模块中创建。l每个工程只能有一个Sub Main子过程l当工程中含有Sub Main子过程时,应用程序在装载窗体之前总是先执行Sub Main子过程。l设置SubMain为启动对象:在“工程”菜单的“工程属性”对话框中选取4.7 Sub Main过程与快速提示窗体Sub main()If 条件1 Then frmFirst.Show Elseif 条件2 Then frmSecond.Show End IfEnd SubSub Main的用途:例如运行Microsoft Office的安装程序,程
48、序会先检查电脑中是否安装了Office软件:若没有安装则直接进入安装界面;若安装过则进入一个对话框选择“添加删除组件”、“修复安装”等选项。安装程序的检查过程可以放在Sub Main过程中。语句块(检查是否安装过Office)4.7 Sub Main过程与快速提示窗体2.启动时的快速显示Microsoft Office,VB等软件启动时都会先显示一个快速显示窗体,然后再进入应用程序界面。VB可以通过在Sub Main子过程中编程实现这一功能。首先,添加快速显示窗体(可通过模板修改获得)然后,根据程序需要编写Sub Main子过程程序代码Sub main()frmSplash.Show frmFirst.Show Unload frmSplashEnd Sub