2016-12-14 49 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