使用For循环检查重复项 - 错误错误是:对象引用未设置为对象的实例

时间:2016-10-05 22:26:15

标签: vb.net nullreferenceexception

我有一个问题,我和我有限的经验无法弄清楚。

我有一个多显示(表格)程序,用于使用(5)显示系统的游戏节目系统。当我正在整理这个项目时,我一直在做一些管家和预先处理一些潜在的用户错误。

在这种情况下:有一个名为GameSetup的表单,其中包含通过数据库选择“团队”填充的下拉菜单。选择Team后,(10)标签将填入注册的团队成员。用户将团队成员(即玩家)拖放到一组(6)标签上,这些标签将构成游戏的活跃团队。

问题:我希望检查何时将名称添加到活动团队名单中以确保没有重复项。我认为,最干净的方法是在活动玩家标签的.TextChanged动作上,并使用For循环来检查其他活跃的团队玩家名称。

    Private Sub lblT1_P1_TextChanged(sender As Object, e As EventArgs) Handles lblT1_P1.TextChanged

    cmdReady.BackColor = Color.Yellow

    For i = 1 To 6

        If i = 1 Then

            ' Do nothing

        ElseIf Me.Controls("lblT1_P" & i.ToString).Text = lblT1_P1.Text Then 'This is the line triggering the NullException

            MsgBox("This Player is already selected. Please choose another Player", MsgBoxStyle.OkOnly)
            Me.Controls("lblT1_P" & i.ToString).Text = "DRAG PLAYER HERE" 'This is the other line triggering the NullException

        End If

    Next i

End Sub

i = 1 Do Nothing是不会与自身进行比较(在本例中)

当我运行程序(de-bug)时,在表单GameSetup加载之前,我得到一个Null Exception,这是有意义的,因为它正在查看表单中的表单或对象尚未初始化。显然,Me.Controls是问题,但我不知道如何处理在For循环中使用整数(i)。

标签名称为lblT1_P1 - lblT1_P6(每组3个实例(T1 / T2 / T3)。我目前只处理T1_P1

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用string.Format()生成控件名称,因为它更具可读性。

取代 Me.controls(“lblName”)。文字 使用 DirectCast(Me.FindControl(“lblName”),Label).Text