Vb.net Visual Basic错误消息

Vb.net Visual Basic错误消息,vb.net,Vb.net,我对Visual Basic非常陌生,所以我意识到这个问题是补救性的。。。当我尝试使用以下代码运行程序时,会收到以下错误消息: Microsoft.VisualBasic.dll中发生类型为“System.InvalidCastException”的未处理异常 其他信息:从字符串“”到类型“Double”的转换无效 我知道有人问过类似的问题,但我想显示我的代码,如下所示: Private Sub txtGrade1_TextChanged(sender As Object, e As Event

我对Visual Basic非常陌生,所以我意识到这个问题是补救性的。。。当我尝试使用以下代码运行程序时,会收到以下错误消息:

Microsoft.VisualBasic.dll中发生类型为“System.InvalidCastException”的未处理异常

其他信息:从字符串“”到类型“Double”的转换无效

我知道有人问过类似的问题,但我想显示我的代码,如下所示:

Private Sub txtGrade1_TextChanged(sender As Object, e As EventArgs) Handles txtGrade1.TextChanged

    Dim numGrade As Decimal

    numGrade = CDec(txtGrade1.Text * 0.15) + CDec(txtGrade2.Text * 0.25) + CDec(txtGrade3.Text * 0.2) + CDec(txtGrade4.Text * 0.4)
    MsgBox("Your Grade is" + numGrade)

End Sub

我不知道这里发生了什么。程序运行时允许我在文本框中输入1位数字,但随后我会收到错误消息

好的,这将解决您的类型不匹配问题。但您可能不希望每次
txtGrade1.Text
更改时都显示消息框

Private Sub txtGrade_TextChanged(sender As Object, e As EventArgs) Handles txtGrade1.TextChanged
    Dim grade1, grade2, grade3, grade4 As Double
    If Double.TryParse(txtGrade1.Text, grade1) _
            AndAlso Double.TryParse(txtGrade2.Text, grade2) _
            AndAlso Double.TryParse(txtGrade3.Text, grade3) _
            AndAlso Double.TryParse(txtGrade4.Text, grade4) Then
        Dim grade = grade1 * 0.15 + grade2 * 0.25 + grade3 * 0.2 + grade4 * 0.4
        MsgBox(String.Format("Your Grade is {0}", grade))
    End If
End Sub
为了改进您的代码,您可以在验证任何
文本框而不是更改任何文本框时实现这一点,因为如果您键入99,则在键入前9个文本框后将触发更改事件。当您移出
文本框
时,已验证的处理程序将激发

Private Sub txtGradesValidated(sender As Object, e As EventArgs) _
        Handles txtGrade1.Validated, txtGrade2.Validated, txtGrade3.Validated, txtGrade4.Validated
    Dim grade1, grade2, grade3, grade4 As Double
    If Double.TryParse(txtGrade1.Text, grade1) _
            AndAlso Double.TryParse(txtGrade2.Text, grade2) _
            AndAlso Double.TryParse(txtGrade3.Text, grade3) _
            AndAlso Double.TryParse(txtGrade4.Text, grade4) Then
        Dim grade = grade1 * 0.15 + grade2 * 0.25 + grade3 * 0.2 + grade4 * 0.4
        MsgBox(String.Format("Your Grade is {0}", grade))
    End If
End Sub

仍然不理想,如果您测试它,您将看到这一点。你也可以考虑按键或KEYUP,只在输入媒体上执行逻辑,但是这会改变程序的逻辑和设计,这取决于你。< /P>声明NUMLAST,因为StringYou必须在()外进行乘法运算。您当前的代码正在尝试将txtGrade.Text*0.15相乘,然后使用CDec()进行转换。先转换,然后乘法:
numGrade=CDec(txtrade1.Text)*0.15+
等。每个txtGrade#文本框中都需要有有效的数字-空白不可能。但是,您可以使用一个小技巧,Val()函数,它会将一个空格变为零。例如,
CDec(Val(txtGrade1.Text))*0.15
。不过,更明智的做法是学习使用Decimal.TryParse方法()。另外,请尝试使用MsgBox:
“您的成绩是”&numGrade
。将此作为文件
选项中对
严格要求的第一行,您的IDE将引导您克服所有错误。您应该理解错误原因:
txtGrade1.Text*0.15
,字符串时间浮点。您如何定义此操作?