2015-11-30 31 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 
相關問題