クラスレベルで変数を宣言し、その変数をプロシージャで使用すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生することがあります。
たとえば、これは特定の温度での物質の状態を表示するプログラムを作成する私の最新のプロジェクトです。
Public Class Form1
Const WATER_FP As Integer = 0
Const WATER_BP As Integer = 100
Const ETHANOL_FP As Integer = -114
Const ETHANOL_BP As Integer = 78
Const MERCURY_FP As Integer = -39
Const MERCURY_BP As Integer = 357
Const OXYGEN_FP As Integer = -219
Const OXYGEN_BP As Integer = -183
Dim strSolid As String = vbNullString
Dim strGas As String = vbNullString
Dim sngTemperature As Single = CSng(txtTemperature.Text)
Private Sub btnDisplayState_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplayState.Click
If sngTemperature <= WATER_FP Then
strSolid &= "Water "
ElseIf sngTemperature >= WATER_BP Then
strGas &= "Water "
End If
If sngTemperature <= ETHANOL_FP Then
strSolid &= "Ethanol "
ElseIf sngTemperature >= ETHANOL_BP Then
strGas &= "Ethanol "
End If
If sngTemperature <= MERCURY_FP Then
strSolid &= "Mercury "
ElseIf sngTemperature >= MERCURY_BP Then
strGas &= "Mercury "
End If
If sngTemperature <= OXYGEN_FP Then
strSolid &= "Oxygen "
ElseIf sngTemperature >= OXYGEN_BP Then
strGas &= "Oxygen "
End If
If strSolid <> vbNullString Then
strSolid = "Substances that are in solid state are " & strSolid
Else
strSolid = "No substances are in solid state."
End If
If strGas <> vbNullString Then
strGas = "Substances that are in gaseous state are " & strGas
Else
strGas = "No substances are in gaseous state."
End If
lblMessage.Text = strSolid & ControlChars.CrLf & strGas
End Sub
End Class
デバッグ時に、コードが問題を引き起こしている場所が強調表示されずに、上記のようなエラーが発生します。ただし、変数を に移動するbtnDisplayState_Click
と、プログラムは完全に機能します。エラーの原因はわかりましたが、さらに、この問題が発生する理由を知りたいと思っていました。