VB:只允许数字(不是字母)输入文本框

时间:2009-11-15 03:16:32

标签: vb.net winforms textbox filtering

我有一个控制Timer控件间隔的文本框。如何过滤掉字母?是否可以仅限制输入数字(例如,如果输入字母或空格,没有任何反应)?是否有文本框的属性可以实现此目的?谢谢!

5 个答案:

答案 0 :(得分:6)

用另一个控件替换文本框是一个选项吗?根据我的经验,如果您只想将输入限制为数值,我发现NumericUpDown控件更易于使用。

它还有可爱的向上和向下箭头,但最重要的是,它不需要额外的代码。

答案 1 :(得分:3)

忽略除数字之外的所有内容

Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    e.Handled = Not Char.IsDigit(e.KeyChar)
End Sub

答案 2 :(得分:2)

过滤键几乎不能保证用户输入有效数字。时间间隔0可能不好。当用户按下Ctrl + V时,您不会过滤输入。作为程序员,我偏爱接受2E3作为有效输入的程序。

验证事件是为了解决这个问题。删除表单上的几个文本框和ErrorProvider:

  Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
    If TextBox1.Text.Length = 0 Then Exit Sub
    Dim value As Double
    If Not Double.TryParse(TextBox1.Text, value) or value <= 15 or value > 1E6 Then
      TextBox1.SelectAll()
      ErrorProvider1.SetError(TextBox1, "Not a valid number")
      e.Cancel = True
    Else
      TextBox1.Text = value.ToString("N0")
      ErrorProvider1.SetError(TextBox1, "")
      Timer1.Interval = CInt(value)
    End If
  End Sub

答案 3 :(得分:0)

e.Handled = Not Char.IsDigit

答案 4 :(得分:0)

您可以过滤掉特定键。此方法仅允许数字,删除,退格,左箭头和右箭头

Private Sub txtBox_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles yourTxtboxName.KeyDown
    Try

            If Not (e.KeyValue = 8 Or e.KeyValue = 46 Or e.KeyValue = 48 Or e.KeyValue = 49 Or e.KeyValue = 50 Or e.KeyValue = 51 Or e.KeyValue = 52 Or e.KeyValue = 53 Or e.KeyValue = 54 Or _
               e.KeyValue = 55 Or e.KeyValue = 56 Or e.KeyValue = 57 Or e.KeyValue = 96 Or e.KeyValue = 97 Or e.KeyValue = 98 Or e.KeyValue = 99 Or _
              e.KeyValue = 100 Or e.KeyValue = 101 Or e.KeyValue = 102 Or e.KeyValue = 103 Or e.KeyValue = 104 Or e.KeyValue = 105 Or e.KeyValue = 37 Or e.KeyValue = 39) Then

                e.SuppressKeyPress() = True

            End If
    Catch ex As Exception
           'error handling
    End Try