无效的Cast Exception未处理String to Integer

时间:2014-06-02 11:29:24

标签: vb.net .net

我即将完成我的大学项目,所以我真的很想完成这个!在显然完成所有硬位并运行程序之后,错误开始出现。到目前为止,这是我无法解决的问题。下面是错误日志的链接 http://pastebin.com/8FMjUFF5 另外,下面你可以看到我试图做的那段代码:

Public Sub Pizza()
    If Pizza_BaseTextBox.Text = 1 Then
        PizzaBase = 2.99
    ElseIf Pizza_BaseTextBox.Text = 2 Then
        PizzaBase = 4.99
    ElseIf Pizza_BaseTextBox.Text = 3 Then
        PizzaBase = 6.99
    ElseIf Pizza_BaseTextBox.Text = 4 Then
        PizzaBase = 8.99
    Else
        MsgBox("Please enter the correct number corresponding the pizza size you desire! See instructions")

    End If

    If CInt(Topping1TextBox.Text) > 0 And CInt(Topping1TextBox.Text) < 12 Then 'Error here
        Topping1 = 0.5
    Else
        Topping1 = 0
    End If
    If CInt(Topping2TextBox.Text) > 0 And CInt(Topping2TextBox.Text) < 12 Then
        Topping2 = 0.5
    Else
        Topping2 = 0
    End If
    If CInt(Topping3TextBox.Text) > 0 And CInt(Topping3TextBox.Text) < 12 Then
        Topping3 = 0.5
    Else
        Topping3 = 0
    End If
    If CInt(Topping4TextBox.Text) > 0 And CInt(Topping4TextBox.Text) < 12 Then
        Topping4 = 0.5
    Else
        Topping4 = 0
    End If
    If CInt(Topping5TextBox.Text) > 0 And CInt(Topping5TextBox.Text) < 12 Then
        Topping5 = 0.5
    Else
        Topping5 = 0
    End If

    PizzaTotal = PizzaBase + Topping1 + Topping2 + Topping3 + Topping4 + Topping5
End Sub

如果我能得到一些帮助,我将非常感激。

非常感谢您的帮助和支持,欢迎提出所有意见。

此致

何塞·罗德里格兹

2 个答案:

答案 0 :(得分:2)

 CInt(Topping1TextBox.Text) > 0 

如果TextBox为空CInt将抛出异常。由于它是用户输入,因此总是存在空白或包含&#34; ziggy&#34;而不是数字。

由于它是用户输入,我们可以立即测试和转换它:

Dim tmp As Integer
If Integer.TryParse(Topping1TextBox.Text, tmp) = False Then
   ' display error message that the value is invalid
Else
    If tmp > 0 And tmp < 12 Then
        Topping1 = 0.5
    Else
        Topping1 = 0
    End If
End If

' repeat pattern for the others

Integer.TryParse将返回一个布尔值,指示字符串/文本是否能够被解析为传递的变量。如果为True,则变量将保留该值。所有数据类型都具有此功能(Decimal.TryParse等),并且还有其他类似的功能,例如Integer.ParseConvert.ToInt32用于不同的情况。

当前的程序逻辑也没有考虑&#34; -1&#34;在文本框中。通常,对于类似这样的事情,NumericUpDown是更好的选择,因为它会强制输入在给定范围和数字中。

答案 1 :(得分:0)

您可以检查每个文本框以查看其内容是否为数字。如果它们不是数字,则忽略它们或指定默认值。

例如:

忽略非数字:

If IsNumeric(Topping1TextBox.Text) Then
    If CInt(Topping1TextBox.Text) > 0 And CInt(Topping1TextBox.Text) < 12 Then 
        Topping1 = 0.5
    Else
        Topping1 = 0
    End If
End If

非数字的默认值:

If IsNumeric(Topping1TextBox.Text) AndAlso CInt(Topping1TextBox.Text) > 0 AndAlso CInt(Topping1TextBox.Text) < 12 Then
    Topping1 = 0.5
Else
    Topping1 = 0
End If