允许数字,点和退格以及文本框中的删除

时间:2012-06-28 21:57:29

标签: vb.net textbox

我有以下代码:

Private Sub TxtPStof_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtPStof.KeyPress
    e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = ".")

End Sub

只允许数字和。在我的文本框中,但我还需要能够使用退格键或删除按钮删除值。

这可能吗?

谢谢! :)

8 个答案:

答案 0 :(得分:8)

这是错误的方法。

普遍认为限制用户的输入对用户体验不利,并且你总是无法处理特殊情况(例如 Ctrl + V 啊,你忘掉了。每个人都这样做。

相反,.NET提供Validating event来验证用户输入。您应该拦截 事件,按键。 允许用户输入他们想要的文字;特别是,允许​​他们在不中断的情况下犯错误(例如错误输入) - 这将是非常具有破坏性且有用。

然后,一旦它们完成(因为输入焦点离开控件),一次性进行输入验证。

答案 1 :(得分:6)

虽然我完全赞同康拉德鲁道夫的回答 (在KeyPress事件中处理用户输入真是一件混乱的事情)
我想回答你的问题。

KeyPress文档中的MSDN声明The KeyPress event is not raised by noncharacter keys。这意味着您没有获得Delete键,只有BackSpace键。您可以通过对事件处理程序的这一小改动来处理这种情况

Private Sub TxtPStof_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtPStof.KeyPress 

    if e.KeyChar <> ControlChars.Back then
        e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = ".") 
    end if

End Sub 

答案 2 :(得分:0)

If Char.IsLetterOrDigit(e.KeyChar) Or e.KeyChar = ControlChars.Back Or e.KeyChar = "." Then

        e.Handled = False

Else

        e.Handled = True

End If

答案 3 :(得分:0)

这段代码对我来说很好。

 If Not ((Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 127) Then
        e.KeyChar = ""
        e.Handled = False
    End If

答案 4 :(得分:0)

试试这个:

    If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
        If Not (Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 46) Then e.Handled = True
    End If

答案 5 :(得分:0)

Private Sub textbox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textbox.KeyPress
    If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back Then
        e.Handled = True

    End If
End Sub

这应该做你想做的事。

答案 6 :(得分:0)

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        Dim NumString = "0123456789.-"
        If Not NumString.Contains(e.KeyChar) Then
            If Asc(e.KeyChar) <> 8 Then  'BackSpace is allowed
                e.KeyChar = ""
            End If
        Else
            If e.KeyChar = "-" Then
                If Len(Trim(TxtDcrAmt.Text)) > 0 Then
                    e.KeyChar = ""
                End If
            End If

            If e.KeyChar = "." Then
                If TxtDcrAmt.Text.Contains(".") Then
                    e.KeyChar = ""
                End If
            End If

            If TxtDcrAmt.Text.Contains(".") Then
                Dim TLen As Integer = 0
                TLen = TxtDcrAmt.Text.IndexOf(".") + 2
                If Len(Trim(TxtDcrAmt.Text)) > TLen Then
                    e.KeyChar = ""
                End If
            End If
        End If
    End Sub

答案 7 :(得分:-1)

把它放在按键事件上。这只允许点和数字

If Asc(e.KeyChar) <> 8 Then
            If Asc(e.KeyChar) < 46 Or Asc(e.KeyChar) > 57 Or (Asc(e.KeyChar) < 48 And Asc(e.KeyChar) > 46) Then
                e.Handled = True
      End If
End If