2015-11-30 35 views
-2

我有VB程序,它连接了2类,收入和费用的小数。对象输入事件“字符串到十进制无效”

出于某种原因,incomeTextBox.Enter和expensesTextBox.Enter有怪异的行为,他说:

Please enter numeric value for expenses

当我请使用TAB键或鼠标选择其他的InputBox

即使输入整数之后(这则IsNumeric = TRUE) 。

我也得到错误:

An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

Additional information: Conversion from string "" to type 'Decimal' is not valid.

此外,这是VB,不VB.Net,但没有VB标签?

Option Explicit On 
Public Class MainForm 

Public decexpenses, decincome As Decimal 
Public dectotalexpenses As Decimal = 0 
Public dectotalincome As Decimal = 0 

Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    MsgBox("Use Enter key to enter values.") 
End Sub 

Private Sub expensesTextBox_Enter(sender As Object, e As EventArgs) Handles expensesTextBox.Enter 
    Dim expenses = expensesTextBox.Text 
    If IsNumeric(expenses) = False Then 
     MsgBox("Please enter numeric value for expenses.") 
    End If 
    expensesTextBox.Text = "" 
    decexpenses = CDec(expenses) 
    dectotalexpenses = decexpenses + dectotalexpenses 
End Sub 

Private Sub incomeTextBox_Enter(sender As Object, e As EventArgs) Handles incomeTextBox.Enter 
     Dim income = incomeTextBox.Text 
     If IsNumeric(income) = False Then 
     MsgBox("Please enter numeric value for income.") 
    ElseIf IsNumeric(income) = True Then 
     decincome = CDec(income) 
     dectotalincome = decincome + dectotalexpenses 
    End If 
End Sub 
End Class 
+2

我们能看到代码吗? – codeMonger123

+0

对不起,我忘记了(; –

+3

如果用户第一次“进入”TextBox,则会引发Enter事件,可能文本在这个时候是空的,这会引发您的异常。使用'Decimal.TryParse' –

回答

0

Enter事件引发,如果TextBox获得焦点的第一次,大概文本为空,在这一点上它引发你的异常。

在你的代码中,你也使用If...Else netiher,如果值不是数字,也不会返回,所以CDec(expenses)无论如何都会被执行导致异常。此外,而不是IsNumeric使用Decimal.TryParse

Private Sub expensesTextBox_Enter(sender As Object, e As EventArgs) Handles expensesTextBox.Enter 
    Dim value As String = expensesTextBox.Text 
    Dim decincome As Decimal 
    If Not Decimal.TryParse(value, decincome) Then 
     MsgBox("Please enter numeric value for expenses.") 
     Return 
    End If 

    dectotalexpenses = decincome + dectotalexpenses 
End Sub 

你也应该使用不同的事件像TextBox.TextChanged

1

我会不会使用回车的引发事件我会使用Text_Changed并使用KeyDown输入。一旦文本输入,然后他们点击输入文本框中的例程将运行示例如下:

Private Sub expensesTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles expensesTextBox.KeyDown 
    Dim dectotalexpenses As Decimal = 0 
    Dim dectotalincome As Decimal = 0 

    If e.KeyCode = Keys.Enter Then 

     Dim value As String = TextBox1.Text 
     Dim decincome As Decimal 
     If Not Decimal.TryParse(value, decincome) Then 
      MsgBox("Please enter numeric value for expenses.") 
      Return 
     End If 
    End If 
End Sub 
相关问题