在夏天努力让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”。)
现在我在表单加载(此项目中只有一个表单)上发生这种情况,但它没有全局或公共范围。我希望能够在程序中稍后访问hourArray
和minuteArray
,但仍然会在表单加载时发生这种情况。我该怎么做?另外,我描述的变量范围是什么? (即整个表格的范围)。
感谢。
答案 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