3

我有以下代码:

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

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

这可能吗?

谢谢!:)

4

8 回答 8

8

这是错误的做法。

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

相反,.NET 提供了用于验证用户输入的Validating事件。您应该拦截事件,而不是按键。允许用户随意输入文本特别是,让他们不间断地犯错误(例如错误输入)——这将非常具有破坏性并且没有帮助。

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

于 2012-06-28T22:01:44.273 回答
6

虽然我完全同意 Konrad Rudolph 的回答
(在 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 
于 2012-06-28T22:43:47.423 回答
0
If Char.IsLetterOrDigit(e.KeyChar) Or e.KeyChar = ControlChars.Back Or e.KeyChar = "." Then

        e.Handled = False

Else

        e.Handled = True

End If
于 2012-12-19T05:59:39.227 回答
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
于 2014-01-20T08:18:22.153 回答
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
于 2015-04-28T07:58:33.097 回答
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
于 2020-09-16T06:14:34.553 回答
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

这应该做你想做的事。

于 2016-06-24T02:29:18.100 回答
-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
于 2017-03-02T02:51:47.493 回答