我试图有错误消息显示,如果用户不插入任何数字,在字母或符号类型,如果他们在一个数字的类型不是在1-100之间。如果您添加值,GUI工作正常,但尝试触发消息时会使GUI崩溃。
这是我到目前为止所拥有的:
Private Sub btnCalcaulate_Click(sender As Object, e As EventArgs) Handles btnCalcaulate.Click
Dim int_grade1 As Integer = TxtboxNum1.Text
Dim int_grade2 As Integer = txtBoxNum2.Text
Dim int_grade3 As Integer = txtBoxNum3.Text
Dim int_avgGrade As Integer = (int_grade1 + int_grade2 + int_grade3) / 3
lblAverageNum.Text = int_avgGrade
If (TxtboxNum1.Text = "") Then
MsgBox("Please Enter a Value for Number 1")
TxtboxNum1.Focus()
LblNumber1.ForeColor = Color.Red
ElseIf IsNumeric(TxtboxNum1.Text) = False Then
MsgBox("Number 1 value must be a number")
TxtboxNum1.Focus()
LblNumber1.ForeColor = Color.Red
ElseIf TxtboxNum1.Text > 100 Or TxtboxNum1.Text < -1 Then
MsgBox("Number 1 value must be between 1-100")
TxtboxNum1.Focus()
LblNumber1.ForeColor = Color.Red
ElseIf (txtBoxNum2.Text = "") Then
MsgBox("Please Enter a Value for Number 2")
txtBoxNum2.Focus()
lblNumber2.ForeColor = Color.Red
ElseIf IsNumeric(txtBoxNum2.Text) = False Then
MsgBox("Number 2 value must be a number")
txtBoxNum2.Focus()
ElseIf txtBoxNum2.Text > 100 Or txtBoxNum2.Text < -1 Then
MsgBox("Number 2 value must be between 1-100")
txtBoxNum2.Focus()
lblNumber2.ForeColor = Color.Red
ElseIf (txtBoxNum3.Text = "") Then
MsgBox("Please Enter a Value for Number 3")
txtBoxNum3.Focus()
lblNumber3.ForeColor = Color.Red
ElseIf IsNumeric(txtBoxNum3.Text) = False Then
MsgBox("Number 3 value must be a number")
txtBoxNum3.Focus()
ElseIf txtBoxNum3.Text > 100 Or txtBoxNum3.Text < -1 Then
MsgBox("Number 3 value must be between 1-100")
txtBoxNum3.Focus()
lblNumber3.ForeColor = Color.Red
ElseIf lblAverageNum.Text >= 60 Then
lblAverageNum.ForeColor = Color.Green
ElseIf lblAverageNum.Text < 60 Then
lblAverageNum.ForeColor = Color.Red
Else
int_grade1 = CInt(TxtboxNum1.Text)
int_grade2 = CInt(txtBoxNum2.Text)
int_grade3 = CInt(txtBoxNum3.Text)
int_avgGrade = CInt(lblAverageNum.Text)
End If
End Sub
虽然计算工作,当我试图激活错误消息(空格,输入字母或非数字,或数字不之间(0-100))但它崩溃我的程序,而是显示一个错误,在我的程序说“从字符串转换“”类型''是无效的。
1条答案
按热度按时间wmtdaxz31#
程序崩溃是因为方法顶部的代码试图在完成验证之前进行计算(和数据类型转换),这意味着它可能会尝试转换无效值。
要解决这个问题,请不要进行计算或分配整数变量,直到 * 验证步骤之后 *,最好使用
Integer.Parse()
,然后 * 只有验证成功。此外,您应该将验证抽象到一个方法中,以避免重复这么多代码,并且您应该 * 绝对 * 打开
Option Strict
。