为什么我在文本框中写一个数字并将其删除直到为空,我会收到这样的错误
System.FormatException:'输入字符串的格式不正确。'
Private Sub txtPesJmlPesan_TextChanged(sender As Object, e As EventArgs) Handles txtPesJmlPesan.TextChanged
Dim hasil As Integer
If (cbxPesMenu.Text = "Silver") Then
hasil = 15000 * Integer.Parse(txtPesJmlPesan.Text)
lblPesTotal.Text = hasil
ElseIf (cbxPesMenu.Text = "Gold") Then
hasil = 20000 * Integer.Parse(txtPesJmlPesan.Text)
lblPesTotal.Text = hasil
ElseIf (cbxPesMenu.Text = "Diamond") Then
hasil = 25000 * Integer.Parse(txtPesJmlPesan.Text)
lblPesTotal.Text = hasil
End If
End Sub
如果我直到将其删除为空,则代码会很好地工作,并且乘法也能很好地工作。
答案 0 :(得分:0)
从空字符串转换为整数显然不是进行任何计算的有效格式,因为整个字符串为空,您甚至会怎么做?
您可以通过使用Try Catch异常处理程序来解决此问题,如下所示:
d1 = {i: 1 for i in range(1000000)}
d2 = {i: 2 for i in range(2000000)}
%timeit dict(list(d1.items()) + list(d2.items()))
402 ms ± 33.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit {**d1, **d2}
144 ms ± 1.12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
答案 1 :(得分:0)
只需稍微更改您的代码,如下所示:
Private Sub txtPesJmlPesan_TextChanged(sender As Object, e As EventArgs) Handles txtPesJmlPesan.TextChanged
Dim hasil As Integer
If (Not String.IsNullOrEmpty(txtPesJmlPesan.Text)) And (cbxPesMenu.Text = "Silver") Then
hasil = 15000 * Integer.Parse(txtPesJmlPesan.Text)
lblPesTotal.Text = hasil
ElseIf (Not String.IsNullOrEmpty(txtPesJmlPesan.Text)) And (cbxPesMenu.Text = "Gold") Then
hasil = 20000 * Integer.Parse(txtPesJmlPesan.Text)
lblPesTotal.Text = hasil
ElseIf (Not String.IsNullOrEmpty(txtPesJmlPesan.Text)) And (cbxPesMenu.Text = "Diamond") Then
hasil = 25000 * Integer.Parse(txtPesJmlPesan.Text)
lblPesTotal.Text = hasil
End If
End Sub
答案 2 :(得分:0)
TextChanged
将针对每次更改执行,即使用户清除了文本框也是如此。
使用空字符串Integer.Parse
将引发异常。
您可以在对文本框执行操作之前检查其是否为有效整数。
Private Sub txtPesJmlPesan_TextChanged(sender As Object, e As EventArgs) Handles txtPesJmlPesan.TextChanged
Dim hasil As Integer
If Integer.TryParse(txtPesJmlPesan.Text, hasil) = False Then
lblPesTotal.Text = "0" ' Or something else
Exit Sub
End If
If (cbxPesMenu.Text = "Silver") Then
lblPesTotal.Text = (15000 * hasil).ToString()
ElseIf (cbxPesMenu.Text = "Gold") Then
lblPesTotal.Text = (20000 * hasil).ToString()
ElseIf (cbxPesMenu.Text = "Diamond") Then
hasil = 25000 * hasil
lblPesTotal.Text = (25000 * hasil).ToString()
End If
End Sub