《VB程序设计》第四章第六节 变量和过程的作用范围

2020-06-21 15:02

《VB程序设计》第四章第六节 变量和过程的作用范围

第六节 变量和过程的作用范围

一、变量的作用范围

变量的作用范围是指变量有效的范围。根据定义变量的位置和定义变量的语句的不同,在VB中变量可以分为过程级变量、模块级变量和全局变量。

1.过程级变量

过程级变量只有在声明它们的过程中才有效,也称为局部变量。用户无法在其他过程中访问或改变该变量的值。用Dim或者Static 关键字来声明它们。

语法:

Dim 变量名 As 数据类型 Static 变量名 As 数据类型

对任何临时的计算;采用局部变量是最佳选择。例如,有十来个不同的过程,每个过程都包含变量名为i的变量。只要每个i都被声明为局部变量,那么每个过程只识别它自己的变量i,改变它自己的变量i的值,而不会影响别的过程中的变量i。

在Sub过程中显式定义的变量(使用Dim语句)都是局部变量,而没有在过程中显式定义的变量 ,除非其在该过程外 更高级别的位置显式定义过,否则也是局部变量。可以使用Option Explicit 语句来强制显式定义变量。

2.模块级变量

按照默认规定,模块级变量对该模块的所有过程都有效,在模块中的任何过程都可以访问该变量,但其他模块的过程则不可用。可在窗体模块和标准模块顶部用Dim或者Private关键字声明模块级变量。

语法:

Dim 变量名 As 数据类型 Private 变量名 As 数据类型

通过在代码窗口单击过程列表框的“通用”后,在窗体模块(Form1)中声明模块级变量Temp。

3.全局变量

全局变量的作用范围可以是应用程序的所有过程,也称为公用变量。全局变量可以在模块顶部的声明段用Public关键字声明模块级变量。

语法:

Public 变量名 As 数据类型

通过菜单“工程”来添加模块,然后在添加的标准模块(Modulel)的顶部声明全局变量Max。

[例Ex_FormArgu2]在[例Ex FormArgu1]人员管理系统中在进入窗体 frmSecond后分别计算正式员工或临时员工的平均工资,计算平均工资与[例Ex _AverScore]中相同。

Frmsecond窗体的运行界面如图4-6-1(b)所示。

(a)

(b) 图 4-6-1

标准模块文件Modulel.bas程序代码如下:

Option Explicit

Public salary1(5) As Single, salary2(8) As Single

Private Sub frmselect(f As Form, cmdcap As String) '传递窗体参数

f.Caption=cmdcap & \人员管理\End Sub

Private Sub labselect(l As Control, cmdcap As String) '传递窗体参数

l.Caption=\欢迎进入\(13) & cmdcap & \人员管理\ l.FontSize=16 l.FontBold=True l.Visible=True frmsecond.Show frmfirst.Hide End Sub

Private Sub cmdemployee_click(index As Integer) '单击不同按钮

'将按钮的文本传递给frmsecond窗体标题

Call frmselect(frmsecond, cmdemployee(index).Caption) Call labselect(frmsecond.Label1, cmdemployee(index).Caption) frmsecond.Show frmfirst.Hide

End Sub

Private Sub Form_Load()

salary1(0)=1900: salary1(1)=1970: salary1(2)=1915 '设置初始值

salary1(3)=1600: salary1(4)=1655

salary2(0)=2675: salary2(1)=2780: salary2(2)=2715 salary2(3)=2540: salary2(4)=2990: salary2(5)=2770 salary2(6)=2895: salary2(7)=2765 End Sub

Private Function average(stuarray() As Single, n As Integer) As Single '求平均值

Dim i As Integer

Dim aver As Single, sum As Single For i=1 To n - 1

sum=sum + stuarray(i) Next

aver=sum / n average=aver End Function

Private Sub cmdstart_Click()

If \正式\(frmsecond.Caption, 1, 2) Then

txts1.Text=Int(average(salary2(), 8) * 100) / 100 '求正式员工的平均工资

ElseIf \临时\(frmsecond.Caption, 1, 2) Then

txts1.Text=Int(average(salary1(), 5) * 100) / 100 '求临时员工的平均工资 End If End Sub

Private Sub Command2_Click() Me.Hide

frmfirst.Show txts1.Text=\End Sub

在标准模块中声明的全局变量,在应用程序中的任何一个过程中可以直接用该变量名来引用它,例如,Salary1和Salary2数组。而在某个窗体模块中声明的全局变量,当其他窗体模块引用它时,必须用定义它的窗体模块名为前缀。例如,窗体Form1模块中定义了变量Max ,在窗体Form2中要引用,必须使用“Form1.Max”。

注意:

常数、固定字符串、数组、自定义类型都不能作为窗体模块声明的全局变量。

二、静态变量

变量除了使用范围外 ,还有存活期 ,也就是变量能够保持其值的时期。模块级变量和全局变量的存活期是整个应用程序的运行期间。

对于在过程中用Dim 声明的过程级变量仅当本过程执行期间存在,当一个过程执行完毕,它的过程级值就不存在了,过程级变量所占的内存也被释放。当下一次执行该过程时,所有局部变量将重新初始化。静态变量是在过程结束后仍保留变量的值,即其占用的内存单元未释放。

将过程级变量定义成静态变量可以在过程中使用Static关键字来声明变量,其用法和Dim语句完全一样。通常Static关键字和递归的Sub过程不能在一起使用。

[例Ex_Plus]用函数调用的方法计算∑n。

Private Static Function Fac(n As Integer) Dim f as Integer f=f+n Fac=f

End Function

Private Sub Form_Click() Dim I As Integer For I=1 To 5

Print ″∑″;I & ″=″& Fac(i) Next i End Sub

程序分析:

·过程定义语句“Private Static Function Fac (n As Integer)”是为了使过程中所有的过程级变量为静态变量。在过程头前加上Static关键字时,无论过程中的变量是用Static、Dim或Private声明的还是隐式声明的,都会变成静态变量。

·被调函数Fac是计算∑n的值,局部变量f为静态变量,在每次调用Fac函数结束时变量f的值保留为∑i,再与下次的i+1相加。

·如果不用Static声明变量f,则以前的和不会保留,每次调用时函数中f的初值为0。

·如果在模块的声明段定义f,则f成为模块级变量,也会收到同样效果。但是,由于其他过程也可以访问和改变模块级变量的值,因此运算结果也许不可靠,代码将难于维护。

三、过程的作用范围

1.过程的作用范围


《VB程序设计》第四章第六节 变量和过程的作用范围.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:古代汉语资料 

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: