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