那麼,這將解決您的類型不匹配問題。但你可能不希望顯示一個消息框每時間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