system.NullReferenceException:对象未设置为对象的实例

时间:2012-10-11 16:08:21

标签: vb.net winforms custom-controls

Dim Permission As String
        Dim chk As String = "p"
        Permission = (ds.Tables("privilege").Rows(0).Item(0)).ToString
        MessageBox.Show(Permission)
        Dim PermissionArray() As String = Split(Permission, ":")
        For i As Integer = 0 To 36
            If PermissionArray(i) = 1 Then
                Try
                    Dim chkBox As CheckBox = CType(Me.Controls(chk & i), CheckBox)
                    chkBox.Checked = True
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            End If
        Next

此代码在catch中给出了以下错误,我用Google搜索但没有任何工作

这是错误:System.NullReferenceException – Object reference not set to an instance of an object.

3 个答案:

答案 0 :(得分:1)

如您所述chkBox.Checked抛出NullReferenceException,您应该为错误评估以下行:

Dim chkBox As CheckBox = CType(Me.Controls(chk & i), CheckBox)

' This may throw NullReferenceException if there is no (chk & i) control available
chkBox.Checked = True

答案 1 :(得分:1)

虽然这次结果不是你的问题, Permission = (ds.Tables("privilege").Rows(0).Item(0)).ToString  是system.NullReferenceException的主要候选者。此语句依赖于数据集中的所有内容都已完全正确填充或发生错误。

如果数据集中不存在“特权”表,或者表为空,或者第一行的第一列为空,则可以获得异常,并且很难分辨出错误。您应该在依赖分配之前测试这些条件,这样您就不会得到例外。

答案 2 :(得分:0)

我敢打赌你错过了一个或多个控件“p0”......“p35”因为盲目地建立了ID,要求表单控制该ID但从不检查它是否真的被发现。捕获异常时,请尝试在消息中包含“i”的值。那将是你误入歧途的第一个控件。

然后,在使用这些返回值之前,请务必检查您调用的函数的返回值。