我正在编写一个简单的程序来理解全局变量和计时器的范围。
Public Class Form1
Dim gobalVar As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
globalVar = 0
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Messagebox.Show(">" + globalVar.ToString)
globalVar = 1
Messagebox.Show("<" + globalVar.ToString)
End Sub
End Class
我将计时器设置为5秒。 因此,当计时器触发时,globalVar为0,因为在表单加载时将其设置为0,然后在我将globalVar设置为1之后,消息框确认它打印&lt; 1 但是下次定时器触发时,消息框显示&gt; 0,由于某种原因,globalVar会回到0。
不应该将globalVar设为1,因为它是一个全局变量吗? 我是否正确地将globalVar声明为VB中的全局变量?
答案 0 :(得分:4)
您的全局变量名为gobalVar
,但您在计时器方法中使用的变量是globalVar
。 VB.Net对未声明的变量宽容。它被称为Option Explicit
,在这种情况下它是关闭的(我相信默认情况下)。
在您的情况下,每次计时器滴答时,局部变量globalVar
将重新初始化为零。永远不会触及您的实际全局变量。尝试将Option Explicit On
放在文件的顶部,然后您将收到编译器错误。它也可以在项目属性屏幕中的项目级别进行设置。
要么修复错误并重命名全局变量(或更新计时器滴答变量以匹配拼写错误)。
另请注意,这不是一个全局变量。它是Form1
类中的实例变量。如果您创建了表单的另一个实例,它将拥有自己的变量实例。
要使其“真正”全球化(或者最接近它),可以将其置于模块中,也可以在Shared
课程中将其设为Form1
。
有关“全局”变量的更多信息,请参阅this answer。