#vb.net
#vb.net
Вопрос:
Приведенный ниже код представляет собой программу для вычисления ИМТ с использованием текстовых полей. Однако у меня возникла проблема, заключающаяся в том, что когда я очищаю одно из текстовых полей, оно выдает исключение и замораживает программу. Мне было интересно, есть ли у кого-нибудь ответ о том, как это предотвратить. Я уже пытался установить для своих переменных значения 0 и 1, чтобы посмотреть, было ли это проблемой, но, похоже, этого не происходит.
Private Sub tboxWeight_TextChanged(sender As Object, e As EventArgs) Handles tboxWeight.TextChanged
Weight = 0
Weight = Convert.ToInt64(tboxWeight.Text)
End Sub
Private Sub tboxHFeet_TextChanged(sender As Object, e As EventArgs) Handles tboxHFeet.TextChanged
Height_feet = 0
Height_feet = Convert.ToInt64(tboxHFeet.Text)
Get_BMI(1)
End Sub
Private Sub tboxHInch_TextChanged(sender As Object, e As EventArgs) Handles tboxHInch.TextChanged
Height_Inches = 0
Height_Inches = Convert.ToInt64(tboxHInch.Text)
Get_BMI(1)
End Sub
Private Sub tboxAge_TextChanged(sender As Object, e As EventArgs) Handles tboxAge.TextChanged
Age = Convert.ToDouble(tboxAge.Text)
End Sub
Function Get_BMI(ByVal j As Integer) As Double
BMI = (Weight / (Height_Inches (Height_feet * 12) ^ 2) * 703)
tboxBMI.Text = Convert.ToString(BMI)
Exit Function
End function
Комментарии:
1. Смотрите раздел примечания MSDN к Convert.ToXxxx(string) — используйте
TryParse
вместо этого, если вы не хотите обрабатывать исключение при сбое преобразования.
Ответ №1:
Это потому, что вы устанавливаете текстовое поле в поле integer, поэтому, когда текстовое поле пустое, оно выдает исключение, потому что текстовое поле не содержит числа. Попробуйте использовать оператор If else для каждого текстового поля. String.IsNullOrEmpty
функции будет достаточно.
Ответ №2:
Хорошая / наилучшая практика гласит, что вам необходимо проверить данные перед выполнением вычисления, т.Е. Get_BMI(). Приведенный ниже фрагмент кода поможет вам.
Dim textBoxValue As String
If Not String.IsNullOrEmpty(textBoxValue) Then
If IsNumeric(textBoxValue) Then
End If
End If
Комментарии:
1. Как оно может быть числовым, если оно равно null или пустое? Я думаю, вы имели в виду
Not
…2. @Zaggler правильный. Я внес исправление в условие if.
3.
IsNumeric()
тоже может быть довольно ужасно.TryParse()
Функции — гораздо лучший вариант.