2016-12-14 40 views
0

我使用这个代码只是被输入

Private Sub MyTextBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyTextBox.KeyPress 

    If Not Regex.Match(MyTextBox.Text, "^[a-z /s ']*$", RegexOptions.IgnoreCase).Success Then 
     MyTextBox.Text = MyTextBox.Text.Remove(MyTextBox.SelectionStart - 1, 1) 
     MyTextBox.Select(MyTextBox.Text.Count, 0) 
    End If 

End Sub 

,因此用户只能加字母,空格和撇号

代码工作,如果用户数字后自动删除关于正则表达式未被授权的字符

somethin8g

数字8为r emoved

但是,如果用户只是数字

somethin8

8号是可见的,直到用户按其它键,即使最坏的情况,如果用户按下“保存”按钮信息甚至与8号

有没有更好的办法只有在键入后自动取消对正则表达式无权字符接受?

+1

集'e.Handled'为true以防止当前按键被处理。不*操作当前文本框中的文本! –

+0

它不工作或我不明白的方式。在if中使用e.Handled = True,而不是文本操作,我仍然可以将一个数字和数字保留在文本框中。此外,我添加的代码就像如果e.KeyChar = Microsoft.VisualBasic.Strings.ChrW(Keys.Back)然后这样我就可以按空格键来删除 – fedeteka

+1

的'if'声明应检查是否用户输入一个数字。如果他们确实如此,则将'e.Handled'设置为true以忽略按键。喜欢的东西:'如果(Char.IsDigit(e.KeyChar))然后e.Handled = TRUE;。您不应该操纵控件中的文本,并且正则表达式对于一个简单的问题来说太难了。 –

回答

0

通用的解决方案适用于任何情况下(只是改变了allowedChars字符串)

非正则表达式需要

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) _ 
          Handles txtName.KeyPress 

    If Not (Asc(e.KeyChar) = 8) Then 
     Dim allowedChars As String = "abcdefghijklmnñopqrstuvwxyzáéíóúàèìòùäëïöüâêîôû '" 
     If Not allowedChars.Contains(e.KeyChar.ToString.ToLower) Then 
      e.KeyChar = ChrW(0) 
      e.Handled = True 
     End If 
    End If 

End Sub 

从JHON宇的回答改编上Get a textbox to accept only characters in vb.net