那么,这将解决您的类型不匹配问题。但你可能不希望显示一个消息框每时间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
为了提高在你的代码,你可以做到这一点,当任何TextBoxes
是验证而不是改变,因为如果您输入99,则在输入前9个字符后触发更改事件。验证的处理程序在您移出TextBox
时触发。
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
仍然不理想,你会看到如果你测试它。您也可以考虑KeyPress或KeyUp,只执行输入按下的逻辑,但这会改变程序的逻辑和设计,因此取决于您。
来源
2017-04-14 18:31:08
djv
将numGrade声明为字符串 –
您必须在()之外进行乘法运算。您当前的代码正试图乘以txtGrade.Text * 0.15,然后使用CDec()进行转换。先转换再乘以:'numGrade = CDec(txtGrade1.Text)* 0.15 +'等等。 –
每个txtGrade#文本框都需要有一个有效的数字 - 一个空格不会。然而,你可以使用一个小小的欺骗Val()函数,它会将一个空格变成零。例如。 'CDec(Val(txtGrade1.Text))* 0.15'。更聪明的是,要学会使用Decimal.TryParse方法(https://msdn.microsoft.com/en-us/library/9zbda557(v=vs.110).aspx)。此外,请试试MsgBox:'“您的等级是”&numGrade'。 – rskar