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

Chr*_*ph 2 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
Run Code Online (Sandbox Code Playgroud)

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

这可能吗?

谢谢!:)

Kon*_*lph 8

这是错误的做法.

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

相反,.NET提供用于验证用户输入的Validating事件.你应该拦截那个事件,而不是按键.不要让他们不过希望用户在输入文字; 特别是,允许他们犯错误(如键入错误)没有中断-这将是非常破坏性的,不会有帮助.

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


Ste*_*eve 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 
Run Code Online (Sandbox Code Playgroud)