使用 VB.NET 更改的事件文本框中输入字符串的格式不正确

问题描述 投票:0回答:1

我正在尝试使用事件文本框更改,但出现错误“输入字符串的格式不正确”

我的代码有问题吗?

我的代码实现有问题吗?

请指导我

谢谢

Public Class Payment
    Private salesservices As New SalesService()
    Private Sub Payment_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim sales = salesservices.GetSales(LblInvono.Text)
        LabelTotalvalue.Text = sales.Totalinv.ToString("N0")
        txtDiscount.Text = sales.DiscountTotal.ToString("N0")
        txtPayment.Text = (sales.CashPayment + sales.NCashPayment).ToString("N0")
        LabelChange.Text = ((sales.CashPayment + sales.NCashPayment + sales.DiscountTotal) - sales.Totalinv).ToString("N0")
    End Sub
Private Sub OnTextChanged(sender As Object, e As EventArgs) Handles txtPayment.TextChanged, txtDiscount.TextChanged
        Dim payment As Double = 0
        Dim discount As Double = 0
        If Not String.IsNullOrEmpty(txtPayment.Text) OrElse Not String.IsNullOrEmpty(txtDiscount.Text) Then
           'Error code below this line  
           payment = Convert.ToDouble(txtPayment.Text)
            discount = Convert.ToDouble(txtDiscount.Text)
            LabelChange.Text = (Convert.ToDouble(LabelTotalvalue.Text) - discount - payment).ToString("N0")
        Else
            LabelChange.Text = "-" & Convert.ToDouble(LabelTotalvalue.Text).ToString("N0")
        End If
    End Sub
    Private Sub OnText_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtPayment.KeyPress, txtDiscount.KeyPress
        If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) Then
            e.Handled = True
        End If
    End Sub
    Private Sub txtPayment_KeyUp(sender As Object, e As KeyEventArgs) Handles txtPayment.KeyUp
        txtPayment.Text = txtPayment.Text.Replace(",", "")
        Dim discount As Double = 0
        Dim payment As Double = 0
        If Not String.IsNullOrEmpty(txtPayment.Text) Then
            payment = Convert.ToDouble(txtPayment.Text)
            LabelChange.Text = (Convert.ToDouble(LabelTotalvalue.Text) - discount - payment).ToString("N0")
            txtPayment.Text = Convert.ToDouble(txtPayment.Text).ToString("N0")
            txtPayment.[Select](txtPayment.Text.Length, 0)
        End If
    End Sub
    Private Sub txtDiscount_KeyUp(sender As Object, e As KeyEventArgs) Handles txtDiscount.KeyUp
        txtDiscount.Text = txtDiscount.Text.Replace(",", "")
        Dim discount As Double = 0
        Dim payment As Double = 0
        If Not String.IsNullOrEmpty(txtPayment.Text) Then
            discount = Convert.ToDouble(txtDiscount.Text)
            LabelChange.Text = (Convert.ToDouble(LabelTotalvalue.Text) - discount - Payment).ToString("N0")
            txtDiscount.Text = Convert.ToDouble(txtDiscount.Text).ToString("N0")
            txtDiscount.[Select](txtDiscount.Text.Length, 0)
        End If
    End Sub
End Class
vb.net textbox numbers double tostring
1个回答
0
投票

方法

Convert.ToDouble(...)
仅在您确定字符串包含数值时才有效。否则,最好使用
Double.TryParse
方法,正如 文档所说,“如果转换失败不会抛出异常”。

以下是如何重写导致错误的行的示例。而不是:

payment = Convert.ToDouble(txtPayment.Text)

If Not Double.TryParse(txtPayment.Text, payment) Then payment = 0 'The string was not a number End If
    
© www.soinside.com 2019 - 2024. All rights reserved.