-1
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中给了我以下错误,我用谷歌搜索但没有任何效果

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

4

3 回答 3

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
于 2012-10-11T16:11:53.057 回答
1

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

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

于 2012-10-11T16:30:33.173 回答
0

我敢打赌,您缺少一个或多个控件“p0”...“p35”,因为盲目地构建 ID,向表单询问该 ID 的控件,但从不检查它是否真的被发现。捕获异常时,尝试在您的消息中包含“i”的值。这将是您错过的第一个控件。

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

于 2012-10-11T16:12:28.577 回答