如何在vb.net中仅向文本框添加数值
我制作了一个vb.net表单,它有3个文本框和一个名为“计算”的按钮。我只想在文本框中输入一些值,然后单击计算数字的按钮。我已经完成了编码部分的计算 现在我只想在文本框中输入数字,如果我输入字母或符号,我需要在单击ok按钮时使用ok按钮获得一条严重错误消息如何在vb.net中仅向文本框添加数值,vb.net,validation,Vb.net,Validation,我制作了一个vb.net表单,它有3个文本框和一个名为“计算”的按钮。我只想在文本框中输入一些值,然后单击计算数字的按钮。我已经完成了编码部分的计算 现在我只想在文本框中输入数字,如果我输入字母或符号,我需要在单击ok按钮时使用ok按钮获得一条严重错误消息 我该怎么做 您可以使用Int32.TryParse(或Double.TryParse)检查输入的数字是否为整数(或双精度小数点) 您没有指定是为Asp还是为WinForms编码 WinForms: Private Sub TextBoxes_
我该怎么做 您可以使用
Int32.TryParse
(或Double.TryParse
)检查输入的数字是否为整数(或双精度小数点)
您没有指定是为Asp还是为WinForms编码 WinForms:
Private Sub TextBoxes_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged,TextBox2.TextChanged,TextBox3.TextChanged
'Assuming TextBox1,TextBox2,TextBox3 are your textboxes
Dim txt as new textbox
txt=DirectCast(sender,TextBox)
If IsNumeric(txt.text)=False Then
'Here put your code: what you would to do if user insert a not numeric value
'For example, messagobox, ErrorProvider, or clear the textBox etc
End if
End Sub
如果您希望在用户在WinForm应用程序中输入其值时能够处理此问题,则此操作非常有效:
Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Textbox.KeyDown
Select Case e.KeyCode
Case Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, _
Keys.OemPeriod, Keys.Decimal, Keys.Back, Keys.Delete, _
Keys.Left, Keys.Right
If e.Shift = True Then
e.SuppressKeyPress = True
Exit Sub
End If
e.SuppressKeyPress = False
Case Else
e.SuppressKeyPress = True
End Select
End Sub
它允许在文本框中显示数字、小数和导航(删除、退格、左和右)。Tim如果我将一个或多个文本框保持为空,有没有办法显示这些内容?@Sajith:我不明白。当用户不输入任何内容时,上面的代码也会显示MessageBox,因为
“
不能转换为数字。另一件事@Tim,我如何将此代码应用于所有三个文本框???@Sajith:只需将textBox1
替换为您的文本框名称即可。由于您有三个e文本框,因此您必须使用三个If
语句。非常感谢Tim。我得到了我的答案……IsNumeric
是一个旧的VB6函数,它在VB.NET中提供用于向后兼容,但在新代码中,最好使用新的.NET方法,如TryParse
。另外,除非您确实需要严格的DirectCast
,否则我建议在大多数情况下使用CType
。谢谢您的支持comment@StevenDoggart:同意IsNumeric
,但我总是使用DirectCast
,除非我需要CType
的“魔力”。最好知道涉及哪些类型,而不是相信CType
以某种方式为我做这项工作。这可以防止严重的错误,也更符合C语言。TimSchmelter我曾经这样认为,因为我认为DirectCast
与其他语言(如C语言)中的强制转换最接近。然而,我随后意识到DirectCast
没有使用任何CType
操作符重载,因此无法重载DirectCast
操作。所以,尽管我不喜欢继续下去的一些额外的“魔力”,但我觉得CType
更接近于标准的强制转换。@Stevendogart但在那个例子中,因为我们知道发送者总是一个文本框,所以使用DirectCast不是更好吗(也更快)?我这样问是因为我想更好地理解DirectCast和CType之间的区别。
Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Textbox.KeyDown
Select Case e.KeyCode
Case Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, _
Keys.OemPeriod, Keys.Decimal, Keys.Back, Keys.Delete, _
Keys.Left, Keys.Right
If e.Shift = True Then
e.SuppressKeyPress = True
Exit Sub
End If
e.SuppressKeyPress = False
Case Else
e.SuppressKeyPress = True
End Select
End Sub