Пожалуйста, включите Option Strict. Это процесс из 2 частей. Сначала для текущего проекта. В обозревателе решений дважды щелкните Мой проект. Выберите Compile слева. В раскрывающемся списке Option Strict выберите ON. Второй для будущих проектов - Go в Меню инструментов -> Параметры -> Проекты и решения -> VB по умолчанию. В раскрывающемся списке Option Strict выберите ON. Это избавит вас от ошибок во время выполнения.
Я бы не стал запускать этот код каждый раз, когда пользователь вводит ди git. В идеале я хотел бы добавить кнопку расчета, чтобы пользователь мог завершить свои записи. Как минимум измените его на событие .Leave
.
Не повторяйте код 5 раз. Это делает его очень трудно поддерживать, если вам нужно внести изменения в 5 разных местах. Сделайте отдельный Sub
и вызовите его из событий.
Код проверки может быть в операторе If
, поэтому вы не получите кучу нулей.
If Not Double.TryParse(TextBoxWireDiameter.Text, WireDiameter) Then
MessageBox.Show("Please enter only numbers.")
Exit Sub
End If
Расчеты можно комбинировать с кодом дисплея. Я держал это отдельно для ясности.
Private Sub TextBoxWireCurrentDuration_Leave(sender As Object, e As EventArgs) Handles TextBoxWireCurrentDuration.Leave
Calculate()
End Sub
Private Sub Calculate()
'Declare numeric variables
Dim WireDiameter As Double
Dim WireLength As Double
Dim WireResistivity As Double
Dim WireResistance As Double
Dim WireVoltage As Double
Dim WireCurrent As Double
Dim WirePower As Double
Dim WireCurrentDuration As Double
Dim WireHeat As Double
Dim WireTemperatureRise As Double
Dim WireTemperature As Double
'Parse user input
Double.TryParse(TextBoxWireDiameter.Text, WireDiameter)
Double.TryParse(TextWireLength.Text, WireLength)
Double.TryParse(TextBoxWireResistivity.Text, WireResistivity)
Double.TryParse(TextBoxWireVoltage.Text, WireVoltage)
Double.TryParse(TextBoxWireCurrentDuration.Text, WireCurrentDuration)
'Calculations
Dim WireArea = Math.PI * ((WireDiameter / 1000) ^ 2)
Dim WireMass = 8400 * WireArea * WireLength
WireResistance = WireResistivity * (WireLength / 1000) / WireArea
WireCurrent = WireVoltage / WireResistance
WirePower = WireVoltage * WireCurrent
WireHeat = WirePower * WireCurrentDuration * 60
WireTemperatureRise = WireHeat / (WireMass * 450)
WireTemperature = WireTemperatureRise + 22
'Display results
TextBoxWireResistance.Text = WireResistance.ToString("N4")
TextBoxWireCurrent.Text = WireCurrent.ToString("N2")
TextBoxWirePower.Text = WirePower.ToString("N3")
TextBoxWireHeat.Text = WireHeat.ToString("N0")
TextBoxWireTemperatureRise.Text = WireTemperatureRise.ToString("N4")
TextBoxWireTemperature.Text = WireTemperature.ToString("N4")
End Sub