System.FormatException:'输入字符串的格式不正确。 VB.NET

时间:2020-05-15 01:59:39

标签: vb.net

为什么我在文本框中写一个数字并将其删除直到为空,我会收到这样的错误

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

如果我直到将其删除为空,则代码会很好地工作,并且乘法也能很好地工作。

3 个答案:

答案 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
相关问题