我有以下代码:
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
只允许数字和。在我的文本框中,但我还需要能够使用退格键或删除按钮删除值。
这可能吗?
谢谢! :)
答案 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