vb 定义全局变量_VB中变量的生命周期和作用域

51c7d41ef93091fb6d5d865434849114.png

原文链接:

No.22 VB中变量的生命周期和作用域​mp.weixin.qq.com
8e29f486f6fa89dae1f770d560836726.png

这几天我们讲了通用对话框【字体】【打开】【另存为】的使用,按照惯例接下来应该讲【颜色】和【打印】对话框,但是后台有一位朋友想要了解VB中变量的生命周期和作用域,所以今天先插一节课,讲一下“Public”、“Private”、“Dim”和“Static”,明天我们再继续讲通用对话框。

Private和Public

VB有三种级别的变量,分别是局部变量,窗体/模块变量,全局变量。

就好比学校班级里的小组长就是局部变量,他只能管自己的小组成员,班长就是窗体/模块级别的变量,可以管整个班级的小组成员,而学生会就是全局变量,他可以管每一个学生。

Private从字面上看就是私有的,在它声明的过程中,变量就是局部的,例如在窗体的Load事件中定义一个变量 i 并赋值,然后我们通过弹出对话框来查看 i 的值:

a08c106b17114ee9fdb9e4b7abfc3aed.png

看下运行效果:

7f46905adb48e864288ec14165fdcabf.gif

很明显 变量i只在按钮1的单击过程有效,这就是所谓的局部变量。


接下来我们打开代码窗口,在最上方选择“通用”,在通用里定义一个变量a,然后我们再在这个窗体的不同过程中调用这个变量a:

7bd17ce2970743bdef1674749dd226f0.png

然后我们在这几个按钮的单击事件中调用变量a:

c286091c7c8d6a0eb31e02946022e1bd.png

运行效果:

e69ff76fd1147a6cc3b661a04cab2b9d.png

在这个窗体范围内,这个变量都是有效的,但是在其他窗体中这个变量是无效的,这就是窗体/模块变量。


为了解释全局变量,我们添加一个窗体,让程序拥有多个窗体,再添加一个模块。

56af70b5ea573e4ebf6a7f1592d513b9.png

8198b382deac4a50185893724be19e59.png

e94eccf7f8b4a25e24d3420b75765e62.png

a1d7db04dab640cc63297cd5d9e29fa5.png

我们打开刚才添加的模块,在模块中声明变量 k,然后在窗体1和窗体2的按钮单击事件中显示这个变量 k ,看一看这个变量是否有效:

6211af7e01e751fe0c8b1e36661c27b9.png

bcec9f5c4ac6836f1e73259f44fa49bc.png

ba180598e642f4fc7fbe14275977fa38.png

运行效果:

78929e94aaf5fd3d6522e89d34c29e45.png

我们可以清楚的看到,变量k可以在整个工程里任意一个窗体,任意一个过程中有效,这就叫做全局变量,需要在模块中用Public定义。


我们之前讲过Sub过程(点击查看Sub过程),和Function函数过程(点击查看Function函数过程)同理,如果写在模块中,在这个工程里任意的一个地方都可以调用,比如我们在模块中写一个求长方形面积的Function函数:

50b77bc693d782aa23fe5c8fdcff9c17.png

然后我们在任意一个窗体都可以调用此函数:

dea9b0c96f8ba95da9391dd7c16bd4b4.png

运行效果:

c94a23f9b2a84b36a020a7ffcdfc098a.gif

Dim和Static

Dim和Static是声明变量的两种方式,他们有什么区别呢?

Dim声明的变量是动态变量,它的作用范围只限于过程内部。过程结束后,会释放这个变量,当再次开始这个过程时,这个变量的值都会被重新初始化。

Static声明的是静态变量,它不会随着过程或函数的结束而释放,需要等整个程序结束才会释放变量。

为了好理解,我们还通过实际例题来解释,比较直观。

30fd5187f1d1efd8d43f66adc1c6f8b3.png

我们看到:通过Dim定义的动态变量,它的生命周期只存在按钮的单击过程,按钮单击过程结束它就会被释放,再次点击按钮的时候会重新定义k,k的初始值是0,所以每次给变量k+1都是0+1=1,所以窗体上输出的值一直为1。

那么我们换做Static来声明这个变量k试一试:

ed5b57f163374814356bf72346988639.png

这回我们看到,通过Static声明的变量即使按钮的单击过程结束也不会被释放,所以每次单击按钮它的值都是上次的值+1,所以每次在窗体上输出都是变化的。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值