在Visual Basic中设置数组中控件(标签)的文本值

时间:2014-07-30 11:20:49

标签: arrays vb.net controls

我正在尝试通过一组标签(称为“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)”行。我已经调整了一些东西,我认为我正在使用控制数组不正确,但我找不到正确使用它的方法。

2 个答案:

答案 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.LengthhighScores.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()