文本框验证

Har*_*ish 1 vb.net visual-studio-2010

我在表单中使用了很多文本框.我如何验证它们,在某些文本框中我只需要使用文本,而在某些文本框中我只需要使用数字.使用ASCII是一种正确的方法还是有更简单的方法来做到这一点.如果是这样,请告诉我编码.

Kon*_*lph 7

最重要的是,不要惹恼用户.如果我正在键入一些文本并且应用程序阻止了(不管它是怎么做的),我理所当然地生气了.

有多个值可以处理:

  • 对数值使用NumericUpDownSlider控制而不是文本框(换句话说:使用正确的控件而不是通用控件).

  • 允许(或多或少)任意输入并尝试以有意义的方式解析用户输入.例如,输入" +33 (0) 6 12-34-56"对于法国的电话号码来说是完全有意义的格式.应用程序应该允许,并尝试正确解析它.

    当然,这是最难的方式,但它提供了最佳的用户体验.

  • 使用该Validating事件验证输入.每当用户离开输入控件时,即当他们完成输入时,这将自动触发,并且验证不会使用户烦恼.

    该事件的MSDN文档提供了如何正确使用此事件的示例.

但是不要使用KeyPressTextChanged事件来进行验证.第一个会在输入文本时打扰用户.第二个会惹恼了他们,当他们尝试从别的地方粘贴文本.想象一下:我正在尝试从网站上复制一个数字.不幸的是,我复制的文本也包含其他内容,例如" eggs: 14.33 EUR"而不仅仅是" 14.33".

现在,应用程序必须让我有机会粘贴和更正文本.如果我不被允许这样做,那么应用程序就是UX失败.如果应用程序使用该TextChanged事件来阻止我粘贴此文本,我将无法删除有问题的文本.


Sch*_*enz 0

哇,这可能是一个非常广泛的话题......

对于数字文本框,您可能应该限制 KeyPress 事件期间的输入:

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

    Dim allowedChars As String = "0123456789"

    If allowedChars.IndexOf(e.KeyChar) = -1 Then
        ' Invalid Character
        e.Handled = True
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

注意:此代码示例假设为 WinForms,对于 Web 必须使用不同的方法...

无论平台如何,您都应该查看框架提供的验证控件,这将允许您验证是否确实存在输入,值是否在指定范围内,并且还可以使用正则表达式编写更复杂的验证规则。