2012-10-11 49 views
-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 

此代碼爲我提供了捕獲以下錯誤的情況下,我用Google搜索,但沒有什麼工作System.NullReferenceException:對象未設置爲一個對象

這是錯誤:System.NullReferenceException – Object reference not set to an instance of an object.

+0

它也應該給你一個發生的地方。 – user7116

+0

@sixlettervariables它給了我錯誤'chkBox.Checked = True' –

+1

然後你顯然沒有控制其中的一個名字(參見'chk&i')。 – user7116

回答

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 
+0

不,我有所有的項目,比如「p0」到「p36」 –

+2

不是,你沒有(或者其中一個不是'CheckBox')。 – user7116

+0

好吧,我有p0這是一個複選框,所以至少應該工作,就好像錯誤發生在任何特定的點之前它將保持不變,但問題是這行不會執行Dim chkBox As CheckBox = CType(Me .Controls(chk&i),CheckBox)'這行是否正確? –

0

我敢打賭,你缺少一個或MO重新控制「p0」...「p35」,因爲盲目地建立了ID,請求表單控制該ID,但從不檢查它是否真的被發現。嘗試在異常被捕獲時在消息中包含'i'的值。這將是你誤入歧途的第一個控制。

然後,請務必在使用這些返回值之前檢查您調用的函數的返回值。

+0

不,我有所有的項目,比如「p0」到「p36」。 –

1

雖然事實證明這次不是你的問題,但是 Permission = (ds.Tables("privilege").Rows(0).Item(0)).ToString 是system.NullReferenceException的主要候選者。此聲明依賴於您的數據集中的所有內容完全正確地填充或發生錯誤。

如果表「權限」不存在於數據集中,或者表爲空,或者第一行的第一列爲空,則可以獲取異常,並且很難分辨出哪些是錯誤的。你應該在依靠任務之前測試這些條件,所以你沒有得到例外。

相關問題