Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在类级别声明变量时,对象引用未设置为对象的实例_.net_Vb.net_Winforms_Visual Studio 2010 - Fatal编程技术网

.net 在类级别声明变量时,对象引用未设置为对象的实例

.net 在类级别声明变量时,对象引用未设置为对象的实例,.net,vb.net,winforms,visual-studio-2010,.net,Vb.net,Winforms,Visual Studio 2010,有时,当我在类级别声明变量并在过程中使用该变量时,会出现“对象引用未设置为对象的实例”错误 例如,这是我最近的一个项目,创建一个程序来显示特定温度下物质的状态: 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 Co

有时,当我在类级别声明变量并在过程中使用该变量时,会出现“对象引用未设置为对象的实例”错误

例如,这是我最近的一个项目,创建一个程序来显示特定温度下物质的状态:

 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
公共类表单1
常量水\u FP为整数=0
常量水\u BP为整数=100
常数FP为整数=-114
常数为整数=78
常量MERCURY_FP为整数=-39
常数MERCURY_BP为整数=357
常数氧作为整数=219
常数氧_BP为整数=-183
Dim strSolid As String=vbNullString
作为字符串的Dim strGas=vbNullString
尺寸SNG单一温度=CSng(txtTemperature.Text)
私有子btnDisplayState_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnDisplayState。单击
如果SNG温度=水_BP,则
strGas&=“水”
如果结束
如果sngTemperature=乙醇_BP,则
strGas&=“乙醇”
如果结束
如果sngTemperature=MERCURY\u BP,则
strGas&=“水星”
如果结束
如果SNG温度=氧气_BP,则
strGas&=“氧气”
如果结束
如果是strSolid vbNullString,则
strSolid=“固态物质为”&strSolid
其他的
strSolid=“没有任何物质处于固态。”
如果结束
如果字符串为空,则
strGas=“气态物质为”&strGas
其他的
strGas=“没有任何物质处于气态。”
如果结束
lblMessage.Text=strSolid&ControlChars.CrLf&strGas
端接头
末级

调试后,我得到一个如上所述的错误,没有突出显示代码导致问题的位置。但是,如果我将变量移动到
btnDisplayState\u单击
,则程序工作正常。现在我知道了错误的原因,但是我想知道为什么会出现这个问题。

您不能用控件的属性声明变量,因为控件尚未初始化。您需要在输入某些文本后而不是在有值之前设置该值

 Dim sngTemperature As Single = CSng(txtTemperature.Text)'no value here yet
只需将其声明为类级别:

 Dim sngTemperature As Single 
然后在按钮事件中设置它

Dim sngTemperature As Single = CSng(txtTemperature.Text)
不要这样分配变量。假设txtTemperature.Text在sngtTemperature之前初始化。轻松修复,更改为:

Dim sngTemperature As Single = 0
并将您的方法更改为从以下内容开始:

Private Sub btnDisplayState_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplayState.Click

  sngTemperature = CSng(txtTemperature.Text)

  If sngTemperature <= WATER_FP Then
     strSolid &= "Water "
  ' etc etc
Private子btnDisplayState\u Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnDisplayState。单击
SNGTTemperature=CSng(txtTemperature.Text)
如果温度