Vb.net 编译错误:类型为';系统。无效卡斯特例外';发生在Microsoft.VisualBasic.dll中
我在表单编译时收到此错误消息。表单可以正常工作,并按照我的要求运行,但错误不断出现 以下是我的源代码:Vb.net 编译错误:类型为';系统。无效卡斯特例外';发生在Microsoft.VisualBasic.dll中,vb.net,Vb.net,我在表单编译时收到此错误消息。表单可以正常工作,并按照我的要求运行,但错误不断出现 以下是我的源代码: Option Strict On Option Explicit On Public Class frmEnterMidPoint Dim Obj As New frmCustomRanges Private Sub txtMidPointValue_TextChanged(sender As Object, e As EventArgs) Handles txtMidP
Option Strict On
Option Explicit On
Public Class frmEnterMidPoint
Dim Obj As New frmCustomRanges
Private Sub txtMidPointValue_TextChanged(sender As Object, e As EventArgs) Handles txtMidPointValue.TextChanged
'This event runs when the txtMidPointValue is changed.
'it enables the clear button if it's not empty.
If txtMidPointValue.Text = "" Then
btnClear.Enabled = False
Else
btnClear.Enabled = True
End If
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
'This event runs when the btnOk is pressed. The procedure takes the value
'entered in the text box and converts to a decimal. That value
'is then sent to the frmCustomRanges form Mid label. The procedure
'also calculates the hourly equivalent.
'The procedure ends by closing the current form and opening
'the frmCustomRanges form.
If IsNumeric(txtMidPointValue.Text) Then
'Convert number entered to decimal
Dim decMidPointValue As Decimal = Convert.ToDecimal(txtMidPointValue.Text)
'Display results as dollar sign for Annual and Hourly
Obj.lblAnnualMid.Text = decMidPointValue.ToString("C")
Obj.lblHourlyMid.Text = Convert.ToDecimal(decMidPointValue / 52 / 40).ToString("C")
'Close current form
Me.Close()
'Open frmCustomRanges
Obj.ShowDialog()
Else
MsgBox("You have entered a non-numeric value. Please check value and enter again", vbCritical, "Input Error")
With txtMidPointValue
.Text = ""
.Focus()
End With
End If
End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
'This event runs when the btnClear is clicked.
'The event clears the textbox and sends the foucs
'back to the textbox
With txtMidPointValue
.Text = ""
.Focus()
End With
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
'This even runs when the btnCancel is clicked.
'The procedure closes the current form and opens the
'Custom Ranges form.
'Close current form
Me.Close()
'Open the Custom Ranges form
Obj.ShowDialog()
End Sub
End Class
您可以使用Decimal.TryParse-IsNumeric()来检查某个数字是否是您可以使用的数字,它不一定是最佳选择
Private Sub bnOK_Click(sender As Object, e As EventArgs) Handles bnOK.Click
Dim decMidPointValue As Decimal
If Decimal.TryParse(txtMidPointValue.Text, decMidPointValue) Then
' decMidPointValue contains the parsed value.
Obj.lblAnnualMid.Text = decMidPointValue.ToString("C")
Obj.lblHourlyMid.Text = (decMidPointValue / 52 / 40).ToString("C")
' more code...
Else
' could not be parsed as a Decimal; decMidPointValue is zero.
' inform user.
End If
End Sub
试着正确地转换
Dim dec As Decimal
If Decimal.TryParse(txtMidPointValue.Text, dec)
'dec is now converted
Else
'dec is not converted - tell the user
End If
如果表单没有编译,它是如何工作的?我猜您的
Convert.ToDecimal
中有一个抛出了异常。您是否尝试过将它们包装在try/catch中以隔离错误的来源?如果您使用的是IsNumeric(),而字符串不是。调试器太让你困惑了。右键单击输出窗口并取消选中“异常消息”。谢谢。我仍然在vb.net中摸索。这很有帮助