只是為了背景關系;我需要計算位于 5 個文本框中的 5 個數字的平均值。Nummer 表示數字 Gemiddelde 表示平均值,Bereken 表示計算 是什么導致它崩潰?
Private Sub butBereken_Click(sender As Object, e As EventArgs) Handles butBereken.Click
'Variabelen'
Dim nummer1 As Decimal = txtNummer1.Text
Dim nummer2 As Decimal = txtNummer2.Text
Dim nummer3 As Decimal = txtNummer3.Text
Dim nummer4 As Decimal = txtNummer4.Text
Dim nummer5 As Decimal = txtNummer5.Text
Dim somNummers As Decimal = nummer1 nummer2 nummer3 nummer4 nummer5
Dim Gemiddelde As String = (somNummers) / 5
lblGemiddelde.Text = Gemiddelde
If Gemiddelde < 5.5 Then
lblGemiddelde.Text = Gemiddelde " Dit is onvoldoende"
End If
If nummer1 = "" Or nummer2 = "" Or nummer3 = "" Or
nummer4 = "" Or nummer5 = "" Then
butBereken.Enabled = False
MessageBox.Show("your mom")
Else
butBereken.Enabled = True
End If
End Sub
uj5u.com熱心網友回復:
我看不出什么會使程式崩潰,但在將它們分配給數字變數之前檢查文本框是否具有值。十進制值永遠不會 = ""。
Private Sub butBereken_Click(sender As Object, e As EventArgs) Handles butBereken.Click 'Variabelen'
If Not IsNumeric(txtNummer1.Text) Or _
Not IsNumeric(txtNummer2.Text) Or _
Not IsNumeric(txtNummer3.Text) Or _
Not IsNumeric(txtNummer4.Text) Or _
Not IsNumeric(txtNummer5.Text) Then
MessageBox.Show ("your mom wants you to fill in all the number boxes")
Exit Sub
End If
Dim nummer1 As Decimal = CDec(txtNummer1.Text)
Dim nummer2 As Decimal = CDec(txtNummer2.Text)
Dim nummer3 As Decimal = CDec(txtNummer3.Text)
Dim nummer4 As Decimal = CDec(txtNummer4.Text)
Dim nummer5 As Decimal = CDec(txtNummer5.Text)
Dim somNummers As Decimal = nummer1 nummer2 nummer3 nummer4 nummer5
Dim Gemiddelde As String = (somNummers) / 5
lblGemiddelde.Text = Gemiddelde
If Gemiddelde < 5.5 Then
lblGemiddelde.Text = Gemiddelde "Dit is onvoldoende"
End If
If nummer1 = 0 Or nummer2 = 0 Or nummer3 = 0 Or nummer4 = 0 Or nummer5 = 0 Then
butBereken.Enabled = False
MessageBox.Show ("your mom")
Else
butBereken.Enabled = True
End If
End Sub
如果這不起作用,我會考慮在 can 中設定斷點以確定導致崩潰的行。
如果這不起作用,請考慮將此行添加到表單的初始化中:
butBereken.Caption = "Warning: Do not Click!"
uj5u.com熱心網友回復:
假設用戶使用純數字資料填充所有文本框,(并且您已經檢查過)嘗試用此代碼替換代碼中的這些行
Dim nummer1 As Decimal = txtNummer1.Text
Dim nummer2 As Decimal = txtNummer2.Text
Dim nummer3 As Decimal = txtNummer3.Text
Dim nummer4 As Decimal = txtNummer4.Text
Dim nummer5 As Decimal = txtNummer5.Text
Dim somNummers As Decimal = nummer1 nummer2 nummer3 nummer4 nummer5
Dim Gemiddelde As Decimal = somNummers / 5
lblGemiddelde.Text = Gemiddelde.ToString("##0.0")
uj5u.com熱心網友回復:
我會做更多類似的事情:
Private Sub butBereken_Click(sender As Object, e As EventArgs) Handles butBereken.Click
Dim TBs() As TextBox = {txtNummer1, txtNummer2, txtNummer3, txtNummer4, txtNummer5}
Dim inputs() As String = TBs.Select(Function(x) x.Text).ToArray()
Dim values() As Decimal
Try
values = Array.ConvertAll(inputs, Function(s) Decimal.Parse(s))
Dim Gemiddelde As String = values.Average()
lblGemiddelde.Text = Gemiddelde & If(Gemiddelde < 5.5, " Dit is onvoldoende", "")
Catch ex As Exception
MessageBox.Show("your mom")
End Try
End Sub
我更喜歡這種方法,因為它不需要重復的代碼行,手動將每個 TextBox 轉換為 Decimal。由于文本框位于陣列中,我們還可以在表單中添加另一個文本框,然后將該名稱添加到陣列的末尾。其余代碼根本不需要更改;它仍然可以按原樣作業。
從 TextBox 陣列中,我們使用 LINQ 陳述句從每個 TextBox 中提取文本并將其添加到稱為“輸入”的字串陣列中。從那里,我們使用 將每個字串轉換為十進制Array.ConvertAll(),再次避免重復代碼。如果任何輸入值不是有效的十進制,則會拋出例外,我們將跳轉 Catch 塊,在該塊中顯示寫得不太好的錯誤訊息。
如果沒有例外,則所有字串輸入都成功轉換為小數并存盤在“值”陣列中。接下來我們簡單地使用 LINQ 函式Average()來獲取所有值的平均值。
最后,我們在標簽中顯示計算的平均值,如果合適,添加“Dit is onvoldoende”訊息。此行中使用的If()函式只是較長If...Else...End If陳述句的簡寫版本。
在您最初的嘗試中,如果任何值為空白(或者如果它們是無效的小數?),您似乎想禁用該按鈕:
If nummer1 = "" Or nummer2 = "" Or nummer3 = "" Or nummer4 = "" Or nummer5 = "" Then
butBereken.Enabled = False
MessageBox.Show("your mom")
Else
butBereken.Enabled = True
End If
這沒有任何意義,就像您禁用按鈕一樣,它如何重新打開以便用戶可以再次單擊它?
另一種方法是處理TextChanged()所有 TextBox 的事件,并在其中一個 TextBox 發生更改時簡單地用平均值實時更新您的 Label:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
UpdateAverage()
End Sub
Private Sub txtAll_TextChanged(sender As Object, e As EventArgs) Handles txtNummer5.TextChanged, txtNummer4.TextChanged, txtNummer3.TextChanged, txtNummer2.TextChanged, txtNummer1.TextChanged
UpdateAverage()
End Sub
Private Sub UpdateAverage()
Dim TBs() As TextBox = {txtNummer1, txtNummer2, txtNummer3, txtNummer4, txtNummer5}
Dim inputs() As String = TBs.Select(Function(x) x.Text).ToArray()
Try
Dim values() As Decimal = Array.ConvertAll(inputs, Function(s) Decimal.Parse(s))
Dim average As Decimal = values.Average
lblGemiddelde.Text = average & If(average < 5.5, " Dit is onvoldoende", "")
Catch ex As Exception
lblGemiddelde.Text = "{ Invalid Input }"
End Try
End Sub
End Class
樣品運行:

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/437682.html
