我正在尝试通过一组标签(称为“rank”)运行循环,并将每个标签的文本设置为高分值列表的值。
Dim highScores As New List(Of Integer)
Dim rank() As Control = {Label1, Label2, Label3, Label4, Label5}
Private Sub High_Scores_Load(sender As Object, e As EventArgs) Handles MyBase.Load
highScores.Add(points)
highScores.Sort()
For index As Integer = 0 To highScores.Count()
rank(index).Text = highScores(index)
Next index
End Sub
当我跑步时,我得到:
对象引用未设置为对象的实例
在“rank(index).Text = highScores(index)
”行。我已经调整了一些东西,我认为我正在使用控制数组不正确,但我找不到正确使用它的方法。
答案 0 :(得分:1)
我敢打赌错误发生在最后一次迭代。您需要减去1
的{{1}}。
Count
此外,您需要确保For index As Integer = 0 To (highScores.Count() - 1)
的长度大于或等于rank
的长度。如果不是,就会发生不好的事情。
highScores
示例强>
If (index < rank.Length) Then
答案 1 :(得分:0)
由于您希望最多显示rank.Length
个标签,因此您只需要找到较小的rank.Length
和highScores.Count()
:
Dim highScores As New List(Of Integer)
Dim rank() As Label = {Label1, Label2, Label3, Label4, Label5}
Private Sub High_Scores_Load(sender As Object, e As EventArgs) Handles MyBase.Load
highScores.Add(points)
highScores.Sort()
For index As Integer = 0 To Math.Min(highScores.Count(), rank.Length) - 1
rank(index).Text = highScores(index).ToString()
Next index
End Sub
您也可以将rank()
声明为Label类型,并且在显示值时似乎忘记使用.ToString()
。