0

只是努力在夏天更流利地使用 Visual Basic,所以我仍然对我的下一个 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稍后,但在表单加载时仍然会发生这种情况。我该怎么做?另外,我描述的是什么变量范围?(即整个表格的范围)。

谢谢。

4

3 回答 3

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

希望能帮助到你 !!

于 2012-06-13T03:39:40.427 回答
0

您正在描述Module Level Scope

从上面的链接:

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

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

声明 Private (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 
于 2012-06-13T04:33:25.933 回答
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
于 2012-06-13T04:14:43.173 回答