Vb.net 仅接受文本框中的数字

Vb.net 仅接受文本框中的数字,vb.net,winforms,visual-studio,Vb.net,Winforms,Visual Studio,给定一个文本框,我怎么能完全忽略非数字字符?因此,如果我按“A”或“Z”,这些字符将永远不会出现在文本框中。如果用户尝试输入数字,如果他也尝试输入非数字,我想运行一些代码。试试这个 Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textBox1.KeyPress If Char.IsDigit(e.KeyChar) Then e.Handled = False

给定一个文本框,我怎么能完全忽略非数字字符?因此,如果我按“A”或“Z”,这些字符将永远不会出现在文本框中。如果用户尝试输入数字,如果他也尝试输入非数字,我想运行一些代码。

试试这个

Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textBox1.KeyPress
    If Char.IsDigit(e.KeyChar) Then
        e.Handled = False
    Else
        e.Handled = True
    End If

End Sub
如果非数字的
e.Handled
设置为true,则不会向文本框输入任何内容;否则,事件消息将按正常方式流动

编辑:

要处理退格和删除,需要做更多的工作,但您可以试试这个

Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textBox1.KeyPress
    If Char.IsDigit(e.KeyChar) OrElse e.KeyChar = CChar(Keys.Delete) OrElse e.KeyChar = CChar(Keys.Back) Then
        e.Handled = False
    Else
        e.Handled = True
    End If

End Sub

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    If keyData = Keys.Delete OrElse keyData = Keys.Back Then
        OnKeyPress(New KeyPressEventArgs(CChar(keyData))
    End If

    Return MyBase.ProcessCmdKey(msg, keyData)
End Function
Delete键和Backspace键不会触发KeyPress事件,因此会重写ProcessCmdKey以手动调用表单的OnKeyPress()

尝试以下操作

Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textBox1.KeyPress
    If Char.IsDigit(e.KeyChar) Then
        e.Handled = False
    Else
        e.Handled = True
    End If

End Sub
如果非数字的
e.Handled
设置为true,则不会向文本框输入任何内容;否则,事件消息将按正常方式流动

编辑:

要处理退格和删除,需要做更多的工作,但您可以试试这个

Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textBox1.KeyPress
    If Char.IsDigit(e.KeyChar) OrElse e.KeyChar = CChar(Keys.Delete) OrElse e.KeyChar = CChar(Keys.Back) Then
        e.Handled = False
    Else
        e.Handled = True
    End If

End Sub

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    If keyData = Keys.Delete OrElse keyData = Keys.Back Then
        OnKeyPress(New KeyPressEventArgs(CChar(keyData))
    End If

    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

Delete键和Backspace键不会触发KeyPress事件,因此会重写ProcessCmdKey以手动调用表单的OnKeyPress()

您可以在OnKeyPress事件中运行测试(或无论事件名称在winforms中是什么)

您可以在OnKeyPress事件中运行测试(或无论事件名称在winforms中是什么)

一种方法是使用“MaskedTextBox”控件并设置其方便的“Mask”属性

一种方法是使用“MaskedTextBox”控件并设置其方便的“Mask”属性

以下代码有效:

Private Sub txtSalary_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSalary.KeyPress
    If (e.KeyChar < Chr(48) Or e.KeyChar > Chr(57)) And e.KeyChar <> Chr(8) Then
        e.Handled = True
    End If
End Sub
Private Sub txtSalary\u KeyPress(ByVal sender作为System.Object,ByVal e作为System.Windows.Forms.KeyPressEventArgs)处理txtSalary.KeyPress
如果(e.KeyCharChr(57))和e.KeyChar Chr(8),则
e、 已处理=真
如果结束
端接头
以下代码有效:

Private Sub txtSalary_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSalary.KeyPress
    If (e.KeyChar < Chr(48) Or e.KeyChar > Chr(57)) And e.KeyChar <> Chr(8) Then
        e.Handled = True
    End If
End Sub
Private Sub txtSalary\u KeyPress(ByVal sender作为System.Object,ByVal e作为System.Windows.Forms.KeyPressEventArgs)处理txtSalary.KeyPress
如果(e.KeyCharChr(57))和e.KeyChar Chr(8),则
e、 已处理=真
如果结束
端接头

您可以在问题右侧查看
相关
下的链接吗?前两个看起来很有前途你看看这个问题右边的
相关
下的链接怎么样?前2个看起来很有前景如果我想用退格删除一些数字怎么办?到目前为止,非常感谢。如果我想使用退格删除一些数字,该怎么办?到目前为止,非常感谢您的帮助。或者使用NumericUpDown控件或者使用NumericUpDown控件