-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 で次のエラーが表示されます。Google で検索しましたが、何も機能していません

これはエラーです:System.NullReferenceException – Object reference not set to an instance of an object.

4

3 に答える 3

1

今回は問題ではないことが判明しましたが Permission = (ds.Tables("privilege").Rows(0).Item(0)).ToString 、system.NullReferenceExceptionの最有力候補です。このステートメントは、データセット内のすべてが完全かつ正しく入力されていることに依存しています。そうでない場合、エラーが発生する可能性があります。

テーブル「privilege」がデータセットに存在しない場合、テーブルが空の場合、または最初の行の最初の列がnullの場合、例外が発生する可能性があり、何が問題であるかを判断するのは非常に困難です。割り当てに依存する前にこれらの条件をテストして、例外が発生しないようにする必要があります。

于 2012-10-11T16:30:33.173 に答える
1

chkBox.CheckedNullReferenceException がスローされることに注意してください。次の行でエラーを評価する必要があります。

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 に答える
0

やみくもに ID を作成し、その ID のコントロールをフォームに問い合わせますが、実際に見つかったかどうかを確認しないため、1 つ以上のコントロール "p0" ... "p35" が欠落しているに違いありません。例外がキャッチされたときに、メッセージに「i」の値を含めてみてください。それはあなたが見逃している最初のコントロールです。

そして、それらの戻り値を使用する前に、呼び出す関数の戻り値を必ず確認してください。

于 2012-10-11T16:12:28.577 に答える