我有VB程序,它连接2类,收入和费用的小数。
由于某种原因,incomeTextBox.Enter和expensesTextBox.Enter有奇怪的行为,说:
请输入费用的数值
当我使用tab键或鼠标选择其他InputBox时,即使输入一个整数(IsNumeric = True)。
我也得到错误:
Microsoft.VisualBasic.dll中出现未处理的“System.InvalidCastException”类型异常
附加信息:从字符串“”到“Decimal”类型的转换无效。
另外,这是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
答案 0 :(得分:1)
我不使用Enter作为raise事件,而是使用Text_Changed并使用KeyDown for Enter。输入文本后,他们点击文本框中的enter键,例程将运行如下:
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
答案 1 :(得分:0)
如果Enter
第一次获得焦点,则会引发TextBox
事件,此时文本可能为空,这会引发您的异常。
在您的代码中,您也可以使用If...Else
,如果值不是数字则返回,因此无论如何都会执行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
。