【问题标题】:System.FormatException: 'Input string was not in a correct format.' VB.NETSystem.FormatException: '输入字符串的格式不正确。' VB.NET
【发布时间】:2020-05-15 01:59:39
【问题描述】:

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

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

代码运行良好,如果我不删除它直到为空,乘法也运行良好。

【问题讨论】:

  • 当异常被抛出时,您是否真的查看了输入字符串是什么?如果您实际查看它,应该很明显为什么它无法转换为数字。你说TextBox 是空的。在这种情况下,它的Text 属性是什么?这是一个有效的数字吗?

标签: vb.net


【解决方案1】:

只需稍微更改您的代码,如下所示:

 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】:

    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
    

    【讨论】:

    • @TeaParty,请在项目中将Option Strict 设置为On,启用Option Strict 编译器会在您运行应用程序之前警告您可能出现的类型错误。
    【解决方案3】:

    从空字符串转换为整数显然不是进行任何计算的有效格式,因为整个字符串都是空的,你会怎么做?

    您可以通过使用 Try Catch 异常处理程序来解决此问题,如下所示:

    Private Sub txtPesJmlPesan_TextChanged(sender As Object, e As EventArgs) Handles txtPesJmlPesan.TextChanged
        Dim hasil As Integer
    
        Try
            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
        Catch ex As Exception
            hasil = 0
            lblPesTotal.Text = hasil ' the best code to suppress that error in a legal way
        End Try
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2011-11-23
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多