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.
答案 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”的值。那将是你误入歧途的第一个控件。
然后,在使用这些返回值之前,请务必检查您调用的函数的返回值。