0

我试图根据他们的经验水平(1-4)以整数计算推销员奖金,以十进制计算他们的销售量(1-10000)。为什么我现在收到此错误?这是代码...

Public Class Form1

    Dim intLvlsTextBox1Numbers As String = Nothing And intLvlsTextBox1Numbers = txtBoxLvl.Text
    Dim decSaleWkTextBox1Numbers As String = Nothing And decSaleWkTextBox1Numbers = txtBoxWklySale.Text

    Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click
        'The Try/Catch method is used to catch the "InvalidCastExceptionUnhandeled" in order to use the 
        'exception for detecting letters within the textboxes being understood in logic as of
        'a wrong type, thus enabling its detection as letter or caracter.
        Try
            intLvlsTextBox1Numbers = Convert.ToInt32(txtBoxLvl.Text)
            decSaleWkTextBox1Numbers = Convert.ToInt32(txtBoxWklySale.Text)
            'This line is used to validate indetify non-valid data input upon entring numbers
            'that are out of rang, and will display the warning error message. It goes from 
            'anything not convertable to Integer 32, i.e. letter, signs.
            MessageBox.Show("Please, input a numerical value")
            'Reset the cursor position when a non-valid data is inputed.
            txtBoxLvl.Select()
            'Catches the EX variable execption,"InvalidCastExceptionUnhandeled".
        Catch ex As FormatException

        End Try

        'procedure call to the ChoiceMenus
        ChoiceMenus()

    End Sub
    Private Sub ChoiceMenus()
        Select Case intLvlsTextBox1Numbers
            Case 1 To 4
        End Select
        Select Case decSaleWkTextBox1Numbers
            Case 1 To 100000
        End Select
    End Sub
    Private Sub isValidCalculation()
        lblTotWkSale.Text = 250 * (intLvlsTextBox1Numbers + 1) + ((intLvlsTextBox1Numbers + 1) / 100) * (decSaleWkTextBox1Numbers)
        decSaleWkTextBox1Numbers = Convert.ToString(lblTotWkSale.Text)
        lblTotWkSale.Text = decSaleWkTextBox1Numbers.ToString("c")
    End Sub
    Private Sub btnClr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClr.Click

        clearForm() 'procedure call

    End Sub

    Private Sub clearForm()
        txtBoxWklySale.Text = ""
        txtBoxLvl.Text = ""
        lblTotWkSale.Text = ""
        lblErrorMsg.Text = ""
        txtBoxLvl.Select()
        'tbxHome = True
        'tbx1 = True
        'tbx2 = True
    End Sub

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click

        Me.Close() 'closes the application
    End Sub
End Class

谢谢!

4

2 回答 2

1

问题是使用Convert.ToInt32. 这个函数需要一个实现IConvertible接口的对象。否则它会抛出一个InvalidCastException.

您要做的是将 a 解析String为 a Int32。Doing to 最适合使用Int32.Parseor Int32.TryParse。如果您不确定输入是否真的是十进制值,则后者效果很好。

所以最后这是你想要做的:

intLvlsTextBox1Numbers = Int32.Parse(txtBoxLvl.Text)
decSaleWkTextBox1Numbers = Int32.Parse(txtBoxWklySale.Text)
于 2012-04-05T12:54:01.930 回答
1
 Dim intLvlsTextBox1Numbers As String = Nothing And intLvlsTextBox1Numbers = txtBoxLvl.Text

您初始化字段的方式非常有创意。虽然我不明白它应该做什么。运行时也不会,它会在表单的构造函数运行时使用 NRE 轰炸您的程序。很难诊断,因为调试器没有很好的线路向您展示。它失败是因为 txtBoxLvl 变量尚未初始化,直到稍后,在 InitializeComponent() 运行之后才会发生。可悲的是,vb.net 也隐藏了一些东西。

尝试编写更健全的代码,您可以在一本关于 vb.net 编程的体面书籍中找到这种代码。这些变量根本不应该是表单类中的字段,它们应该是方法中的局部变量:

Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click
     Dim intLvlsTextBox1Numbers As Integer '' It is not a string!!
     Dim levelOk = Integer.TryParse(txtBoxLvl.Text, intLvlsTextBox1Numbers)
     If Not levelOk Then
         '' complain...
         Return
     End If
     '' etc...
End Sub
于 2012-04-05T13:03:56.817 回答