如何在vb.net中仅向文本框添加数值

如何在vb.net中仅向文本框添加数值,vb.net,validation,Vb.net,Validation,我制作了一个vb.net表单,它有3个文本框和一个名为“计算”的按钮。我只想在文本框中输入一些值,然后单击计算数字的按钮。我已经完成了编码部分的计算 现在我只想在文本框中输入数字,如果我输入字母或符号,我需要在单击ok按钮时使用ok按钮获得一条严重错误消息 我该怎么做 您可以使用Int32.TryParse(或Double.TryParse)检查输入的数字是否为整数(或双精度小数点) 您没有指定是为Asp还是为WinForms编码 WinForms: Private Sub TextBoxes_

我制作了一个vb.net表单,它有3个文本框和一个名为“计算”的按钮。我只想在文本框中输入一些值,然后单击计算数字的按钮。我已经完成了编码部分的计算

现在我只想在文本框中输入数字,如果我输入字母或符号,我需要在单击ok按钮时使用ok按钮获得一条严重错误消息


我该怎么做

您可以使用
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