Пустое текстовое поле Visual Basic создает исключение

#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() Функции — гораздо лучший вариант.