2016-10-19 11 views
0

以下のコードは、テキストボックスを使用してBMIを計算するプログラムです。ただし、テキストボックスの1つをクリアすると例外がスローされ、プログラムがフリーズするという問題があります。私は誰もがこれを防ぐ方法についての答えを持っているのだろうかと思っていた。私はすでに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

*備考* [Convert.ToXxxx上のMSDN(列)]のセクション(https://msdn.microsoft.com/en-us/library/0zahhahw(V = vs.110)の.aspxを参照してください) - 変換が失敗したときに例外を処理したくない場合は、代わりに 'TryParse'を使います。 –

答えて

0

あなたが整数フィールドにテキストボックスを設定するためですので、テキストボックスが空のときにテキストボックスに番号が含まれていないため、それは例外をスローします。 テキストボックスごとにIf else文を使用してみてください。 String.IsNullOrEmpty機能で十分です。

0

良い/ベストプラクティスでは、計算を実行する前にデータを検証する必要があります。つまり、Get_BMI()です。以下のコードスニペットが役立ちます。

Dim textBoxValue As String 
If Not String.IsNullOrEmpty(textBoxValue) Then 
    If IsNumeric(textBoxValue) Then 

    End If 
End If 
+0

nullまたは空の場合、どのように数値にすることができますか?私はあなたが 'Not'を意味したと思う... – Codexer

+0

@Zagglerは正しいです。 if条件でifを修正しました。 –

+0

'IsNumeric()'もかなりひどいことがあります。 'TryParse()'関数はもっと良いオプションです。 –

関連する問題