2009-11-15 110 views

回答

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

如果用户右键单击该文本框并粘贴一些文本,该怎么办? – 2009-11-15 17:31:29

0

e.Handled =不Char.IsDigit

+1

@Lala:这不能编译,因为... – 2009-11-15 03:53:47

6

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

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

+3

也限制了用户的困惑。当他们无法输入任何内容时,他们不会感到惊讶。 – 2009-11-15 16:47:36

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 
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 
相关问题