在加载时声明Global(或public?)变量

时间:2012-06-13 03:29:37

标签: vb.net visual-studio-2010

在夏天努力让Visual Basic更流畅,所以我对下一个视觉基础课仍然很敏感。我的老师考虑了变量,但仅限于本地范围。

我到处寻找,但我找不到我需要的东西。我正在做一个闹钟,我有这个代码来填充分钟数组和小时数组。

Public Class Form1 
    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.clockTimer.Interval = 1 * 1000
        Me.clockTimer.Enabled = True


        Dim hourArray(0 To 11) As String
        For i As Integer = 1 To 12
            If i.ToString.Length < 2 Then
                hourArray(i - 1) = "0" & i
            Else
                hourArray(i - 1) = i
            End If
        Next

        Dim minuteArray(0 To 59) As String
        For i As Integer = 0 To 59
            If i.ToString.Length < 2 Then
                minuteArray(i) = "0" & i
            Else
                minuteArray(i) = i
            End If
        Next

        hourLabel.Text = hourArray(0)
        minuteLabel.Text = minuteArray(0)

    End Sub

(注意:添加“0”只是时钟显示的“01”而不是“1”。)

现在我在表单加载(此项目中只有一个表单)上发生这种情况,但它没有全局或公共范围。我希望能够在程序中稍后访问hourArrayminuteArray,但仍然会在表单加载时发生这种情况。我该怎么做?另外,我描述的变量范围是什么? (即整个表格的范围)。

感谢。

3 个答案:

答案 0 :(得分:1)

你没有告诉你的班级结构。无论如何。将变量hourArray和minuteArray声明为public。在类的开头声明它们并在表单加载方法中初始化它们。

编辑添加了代码示例。

Public Class Form1
    Dim hourArray(0 To 11) As String 'Declaration here
    Dim minuteArray(0 To 59) As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        For i As Integer = 1 To 12
            If i.ToString.Length < 2 Then
                hourArray(i - 1) = "0" & i
            Else
                hourArray(i - 1) = i
            End If
        Next
        For i As Integer = 0 To 59
            If i.ToString.Length < 2 Then
                minuteArray(i) = "0" & i
            Else
                minuteArray(i) = i
            End If
        Next
    End Sub

    Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
        hourArray(1) = "x"
        minuteArray(1) = "y"
    End Sub
End Class

希望它有所帮助!!

答案 1 :(得分:0)

因为你的学习我会告诉你把它们放在哪里

但是稍后,您应该删除数组并直接花时间并在需要时用0填充它,所有这些都没有数组

将这些放在类和子之间,就像这样

 Public Class Form1 
     private hourArray(0 To 11) As String
     private minuteArray(0 To 59) As String
     Public Sub Form1_Loa

如果你想在外面使用这些数组,你应该创建一个像

这样的公共属性
Public readonly Property hour As String()
    Get
         return hourArray
    End Get
End Property

答案 2 :(得分:0)

您正在描述Module Level Scope

从上面链接:

  

为方便起见,单项模块级别同样适用于模块,类和结构。您可以通过将声明语句放在任何过程或块之外但在模块,类或结构中来声明此级别的元素。

     

在模块级别进行声明时,您选择的访问级别决定了范围。包含模块,类或结构的命名空间也会影响范围。

     

您声明私有(Visual Basic)访问级别的元素可用于该模块中的每个过程,但不能用于其他模块中的任何代码。如果您不使用任何访问级别关键字,则模块级别的Dim语句默认为Private。但是,通过在Dim语句中使用Private关键字,可以使范围和访问级别更加明显。

所以在你的情况下,我会做这样的事情

Public Class Form1  

    Dim hourArray(0 To 11) As String   'These variables are private to your Class
    Dim minuteArray(0 To 59) As String 

    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        Me.clockTimer.Interval = 1 * 1000  
        Me.clockTimer.Enabled = True 

        For i As Integer = 1 To 12 
            If i.ToString.Length < 2 Then 
                hourArray(i - 1) = "0" & i 
            Else 
                hourArray(i - 1) = i 
            End If 
        Next 

        For i As Integer = 0 To 59 
            If i.ToString.Length < 2 Then 
                minuteArray(i) = "0" & i 
            Else 
                minuteArray(i) = i 
            End If 
        Next 

        hourLabel.Text = hourArray(0) 
        minuteLabel.Text = minuteArray(0) 

    End Sub