Vb.net 语法错误-无法计算

Vb.net 语法错误-无法计算,vb.net,Vb.net,我想不出我的代码出了什么问题。代码应该使用成本、数量和促销代码(如果有)来计算项目的总成本。当我输入未使用的字符(如)时,它不断崩溃。欢迎任何帮助或改进 Public Class Form1 Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click Dim decDisplayTotal As Decimal Dim decPrice As Decima

我想不出我的代码出了什么问题。代码应该使用成本、数量和促销代码(如果有)来计算项目的总成本。当我输入未使用的字符(如
)时,它不断崩溃。欢迎任何帮助或改进

Public Class Form1

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    Dim decDisplayTotal As Decimal
    Dim decPrice As Decimal = txtPrice.Text
    Dim intQuantity As Integer = txtQuantity.Text
    Dim strPromoCode As String = txtPromoCode.Text


    decDisplayTotal = decPrice * intQuantity
    lblDisplayTotal.Text = "$" & decDisplayTotal
    If decPrice < 0 Then
        lblDisplayTotal.Text = ("")
        txtPrice.Text = Nothing
        txtQuantity.Text = Nothing
        txtPromoCode.Text = Nothing
        MessageBox.Show("Please enter an appropriate price.", "Invalid Input")
    End If
    If intQuantity < 0 Then
        lblDisplayTotal.Text = ("")
        txtPrice.Text = Nothing
        txtQuantity.Text = Nothing
        txtPromoCode.Text = Nothing
        MessageBox.Show("Please enter an approriate quantity.", "Invalid Input")
    End If
    If strPromoCode = ("132") Then
        MessageBox.Show("You used a limited time, 10% off code! Watch your price drop 10%!", "10% off")
        decDisplayTotal = 0.9 * (decPrice * intQuantity)
        lblDisplayTotal.Text = "$" & decDisplayTotal
    End If
    If strPromoCode = ("129") Then
        MessageBox.Show("You used a limited time, 20% off code! Watch your price drop 20%!", "20% off")
        decDisplayTotal = 0.8 * (decPrice * intQuantity)
        lblDisplayTotal.Text = "$" & decDisplayTotal
    End If
    If strPromoCode = ("136") Then
        MessageBox.Show("You used a limited time, 30% off code! Watch your price drop 30%!", "30% off")
        decDisplayTotal = 0.7 * (decPrice * intQuantity)
        lblDisplayTotal.Text = "$" & decDisplayTotal
    End If
    If strPromoCode = ("264") Then
        MessageBox.Show("You used a limited time, buy 1 get 1 free code, so watch your total cut in half!", "Buy 1 Get 1 Free")
        decDisplayTotal = 0.5 * (decPrice * intQuantity)
        lblDisplayTotal.Text = "$" & decDisplayTotal
    End If
    If strPromoCode = ("125") Then
        decDisplayTotal = (decPrice * intQuantity)
        lblDisplayTotal.Text = "$" & decDisplayTotal
    End If
    Try
        decPrice = Convert.ToInt16(txtPrice.Text)
    Catch ex As Exception
        lblDisplayTotal.Text = Nothing
        MessageBox.Show("Please enter an acceptable price.", "Invalid Input")
        txtPrice.Text = Nothing
    End Try
    Try
        intQuantity = Convert.ToInt16(txtQuantity.Text)
    Catch ex As Exception
        lblDisplayTotal.Text = Nothing
        MessageBox.Show("Please enter an acceptable quanitity.", "Invalid Input")
        txtQuantity.Text = Nothing
    End Try
    Try
        strPromoCode = Convert.ToInt16(txtPromoCode.Text)
    Catch ex As Exception
        lblDisplayTotal.Text = Nothing
        MessageBox.Show("Please enter a valid Promo Code.", "Invalid Input")
        txtPromoCode.Text = Nothing
    End Try
End Sub
Private Sub txtPrice_TextChanged(sender As Object, e As EventArgs) Handles txtPrice.TextChanged
    lblDisplayTotal.Text = ("")

End Sub

Private Sub txtQuantity_TextChanged(sender As Object, e As EventArgs) Handles txtQuantity.TextChanged
    lblDisplayTotal.Text = ("")

End Sub

Private Sub txtPromoCode_TextChanged(sender As Object, e As EventArgs) Handles txtPromoCode.TextChanged
    lblDisplayTotal.Text = ("")

End Sub



End Class
公共类表单1
私有子btnCalculate\u单击(发送者作为对象,e作为事件参数)处理btnCalculate。单击
Dim DECdisplay总计为十进制
Dim decPrice作为十进制=txtPrice.Text
Dim intQuantity作为整数=txtQuantity.Text
Dim strPromoCode As String=txtPromoCode.Text
decDisplayTotal=decPrice*intQuantity
lblDisplayTotal.Text=“$”&decdisplaytoal
如果价格<0,则
lblDisplayTotal.Text=(“”)
Text=Nothing
txtQuantity.Text=无
txtPromoCode.Text=无
MessageBox.Show(“请输入适当的价格。”,“输入无效”)
如果结束
如果intQuantity<0,则
lblDisplayTotal.Text=(“”)
Text=Nothing
txtQuantity.Text=无
txtPromoCode.Text=无
MessageBox.Show(“请输入适当数量”,“输入无效”)
如果结束
如果strPromoCode=(“132”),则
MessageBox.Show(“您使用了有限的时间,代码打9折!看着您的价格下降10%!”,“打10折”)
decDisplayTotal=0.9*(decPrice*intQuantity)
lblDisplayTotal.Text=“$”&decdisplaytoal
如果结束
如果strPromoCode=(“129”),则
MessageBox.Show(“您使用了有限的时间,代码打八折!看着您的价格下降20%!”,“打八折”)
decDisplayTotal=0.8*(decPrice*intQuantity)
lblDisplayTotal.Text=“$”&decdisplaytoal
如果结束
如果strPromoCode=(“136”),则
MessageBox.Show(“您使用了有限的时间,30%的折扣代码!看着您的价格下跌30%!”,“30%的折扣”)
decDisplayTotal=0.7*(decPrice*intQuantity)
lblDisplayTotal.Text=“$”&decdisplaytoal
如果结束
如果strPromoCode=(“264”),则
Show(“你用了有限的时间,买一送一的免费代码,所以要把你的总数减半!”,“买一送一的免费代码”)
decDisplayTotal=0.5*(decPrice*intQuantity)
lblDisplayTotal.Text=“$”&decdisplaytoal
如果结束
如果strPromoCode=(“125”),则
decDisplayTotal=(decPrice*intQuantity)
lblDisplayTotal.Text=“$”&decdisplaytoal
如果结束
尝试
decPrice=Convert.ToInt16(txtPrice.Text)
特例
lbldisplaytoal.Text=无
MessageBox.Show(“请输入可接受的价格。”,“输入无效”)
Text=Nothing
结束尝试
尝试
intQuantity=Convert.ToInt16(txtQuantity.Text)
特例
lbldisplaytoal.Text=无
MessageBox.Show(“请输入可接受的数量。”,“输入无效”)
txtQuantity.Text=无
结束尝试
尝试
strPromoCode=Convert.ToInt16(txtPromoCode.Text)
特例
lbldisplaytoal.Text=无
MessageBox.Show(“请输入有效的促销代码。”,“输入无效”)
txtPromoCode.Text=无
结束尝试
端接头
私有子txtPrice_TextChanged(发送者作为对象,e作为事件参数)处理txtPrice.TextChanged
lblDisplayTotal.Text=(“”)
端接头
私有子txtQuantity_TextChanged(发送方作为对象,e作为事件参数)处理txtQuantity.TextChanged
lblDisplayTotal.Text=(“”)
端接头
私有子txtPromoCode_TextChanged(发送方作为对象,e作为事件args)处理txtPromoCode.TextChanged
lblDisplayTotal.Text=(“”)
端接头
末级

首先要明白的是字符串不是数字。VB允许这种松弛,但它以许多微妙的方式回击。 我假设你把一个点放在任何一个文本框中,然后尝试使用该文本,因为它是一个字符串。有时有效,有时无效

正确的方法是要求框架尝试转换,如果转换失败,则通知用户问题

因此,与其使用各种Convert.toxxx,不如使用SomeType.TryParse(即

现在,您键入的值存储在正确的数据类型变量中,您可以继续执行代码的其余部分

....
decDisplayTotal = decPrice * intQuantity
lblDisplayTotal.Text = "$" & decDisplayTotal.ToString
....
需要为项目设置的一个重要配置是项目属性中的
选项Strict On
。此配置将禁止字符串和数字之间的隐式转换,并强制您编写更正确的代码


顺便说一句,在对strPromoCode进行检查之后,您不需要再次重复将文本框中的字符串转换为相应变量的过程

也不知道您在问什么。语法错误可能会阻止编译,但您似乎暗示您遇到了运行时错误。
....
decDisplayTotal = decPrice * intQuantity
lblDisplayTotal.Text = "$" & decDisplayTotal.ToString
....