vb 这部分没看懂 哪里声明了全局变量temp为1?结果为啥是121不是212?

如题所述

因为是通用段声明了这个变量,所以在activate 过程中改变的是这个全局变量,
因为是首先激活 activate 事件,所以第一个输入的应该为 1

输出这个变量后,代码才调用 test 过程,
进入这个过程后,有在过程内声明了 同样名称的变量,这个是局部变量,所以在这个过程内,如果直接写这个变量名称 即 temp 那么表示的是这个局部变量,改变它并不会影响全局变量。所以
temp=2
print temp

这两句代码表示的都只是局部变量而已,所以 第二个输出的是 2。
下面一句,print form1.temp 因为指定了其父对象是窗体,所以是全局变量,所以是1追问

请问Sub test是什么事件啊。。

追答

不是事件。

所谓事件,是由用户的某些操作直接触发的,比如 Form_Click 事件,当用户点击窗体的时候就自动触发这个事件。或者系统自动触发,如上面的 Form_Activate 事件,当程序开始运行的时候,系统加载窗体,就自动触发了这个事件。

而 你图片中的 test 是自定义的一个过程。这样的过程只能在代码中调用,用户的操作是不能触发程序执行这个过程的。

你上面代码中有一行代码是

test

这行代码就是调用 test 过程的。

另一个写法是:

Call test

两种写法都是一样的。

追问

只能在代码中调用?是什么意思?那这个过程什么作用?

追答

就是不能像 Form_Click 这样,由用户的动作来触发。
至于作用,要根据具体代码来说。
这里的test过程就是为了让你理解全局变量和过程变量而已。

追问

你举个简单例子说说test的作用?

追答

这个真没有例子,非要例子,就看你发的这个图里面就好了。
一般用自定义过程是因为 有些代码需要重复的执行多次,所以写到一个单独的自定义过程里面,这样使用的时候用一句话调用就可以了。而不用去重复写这一段代码。

追问

像类模块?标准模块?

追答

这两个又是不同概念了,要展开来说就太多了,这里说不清楚,自己上网搜索下教程吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-04
这个的话 按照他的流程看下去就知道了。
Public Temp As Integer '定义一个全局变量Temp,即后面代码中的Form1.Temp

Private Sub Form_Activate() '这里开始往下执行

Temp=1 '将1这个值赋给Temp

Print Temp
‘在窗体上打印Temp的值,因为上面的那个代码把1这个值赋给了Temp,所以Temp=1,即在窗体上打印一个1

Test ’调用Test过程,去看下面的Sub Test()
End Sub

Sub Test() 'Test过程

Dim Temp As Integer
'定义一个局部变量Temp,名字虽然和全局变量的Temp一样,但是这个是局部变量,只有在Test过程里面才能访问

Temp=2
‘因为这句代码是写在Test过程里面的,所以这里是将2这个值赋给局部变量Temp(全局变量的Temp的值仍然是1,别搞错了)

Print Temp
’因为这句代码是写在Test过程里面的,所以打印的是Test里面的局部变量Temp的值,局部变量Temp的值是2,所以在窗体上打印一个2

Print Form1.Temp
'这句代码虽然是写在Test过程里面,但是因为是Form1.Temp,所以这里调用到了Form1中的Temp变量,即开始定义的那个Public Temp As Integer ,所以Form1.Temp的值是1,即在屏幕上打印一个1

End Sub

'一条龙地看下来可以推出结果就是在窗体打印
1
2
1
相似回答