我正在尝试构建一个vb .net应用程序,在该应用程序中,我的主要表单中有几个文本框,并且在设计时会用数值填充它们。下图显示了我的表单的摘要:
但是当我构建应用程序时,填充的数值将被读取为空字符串(“”)。这是确切的错误:
An exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll but was not handled in user code
Additional information: Conversion from string "" to type 'Double' is not valid.
注意,在“汽车”窗口中,TextBoxWireDiameter
的text属性的值为“”。但是我在设计时为text属性增加了价值。我同样填写的其他文本框也会发生相同的错误。知道为什么会这样吗?
这是我的代码:(所有子代码都包含完全相同的代码)
Public Class Form1
Private Sub TextBoxWireLength_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireLength.TextChanged
Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub
Private Sub TextBoxWireDiameter_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireDiameter.TextChanged
Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub
Private Sub TextBoxWireResistivity_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireResistivity.TextChanged
Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub
Private Sub TextBoxWireVoltage_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireVoltage.TextChanged
Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub
Private Sub TextBoxWireCurrentDuration_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireCurrentDuration.TextChanged
Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub
End Class
这是我尝试解决的问题:
啊,该死!我很轻松地解决了您的问题。只需在所有Try Catch
事件中使用TextChange
。例如:
Private Sub TextBoxWireCurrentDuration_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireCurrentDuration.TextChanged
Try
Dim WireArea As Double = Math.PI * Val((TextBoxWireDiameter.Text / 1000)) * Val((TextBoxWireDiameter.Text / 1000)) / 4
Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
Catch ex As Exception
End Try
End Sub
冷静的人。现在运行正常。