2015-01-03 55 views
-2

這是一件簡單的事情,我一直試圖弄清楚一段時間,它開始惱火。我想要的只是按下按鈕時,只允許某些值出現在文本框中。這是什麼意思是例如只允許「abc123!」在文本框中,如果說如「w」的值,則清除文本框。Visual Basic幫助 - 在可視基本文本框中防止輸入某些字符的文本限制

我嘗試了諸如'如果不是正則表達式。匹配'但它只是導致我的錯誤。

請幫忙;)

+0

我其實需要所有的字符a-z A-z 0-9和所有的符號來工作,我想阻止諸如文或任何其他語言的字符。 –

+0

您需要在關鍵事件上編寫代碼並驗證按下的鍵是否是有效的鍵。基本上你需要加強所有事件的數據輸入或粘貼到您的文本框 –

回答

1

你會想要使用白名單。您允許的字符將比現有其他字符小得多。你可以通過幾種方式來做到這一點。你可以在文本框中處理按鍵事件,如果這個值是什麼,那麼你執行你的代碼。另一種方式可以做到這一點(如果它是一個winforms應用程序)將從文本框繼承並將您的代碼(那麼您可以重新使用此控件)。這裏是一個文本框,只允許數字輸入的例子:

''' <summary> 
''' Text box that only accepts numeric values. 
''' </summary> 
''' <remarks></remarks> 
Public Class NumericTextBox 
    Inherits TextBox 

    Private Const ES_NUMBER As Integer = &H2000 

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams 
     Get 
      Dim params As CreateParams = MyBase.CreateParams 
      params.Style = params.Style Or ES_NUMBER 
      Return params 
     End Get 
    End Property 

    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean 
     'Prevent pasting of non-numeric characters 
     If keyData = (Keys.Shift Or Keys.Insert) OrElse keyData = (Keys.Control Or Keys.V) Then 
      Dim data As IDataObject = Clipboard.GetDataObject 
      If data Is Nothing Then 
       Return MyBase.ProcessCmdKey(msg, keyData) 
      Else 
       Dim text As String = CStr(data.GetData(DataFormats.StringFormat, True)) 
       If text = String.Empty Then 
        Return MyBase.ProcessCmdKey(msg, keyData) 
       Else 
        For Each ch As Char In text.ToCharArray 
         If Not Char.IsNumber(ch) Then 
          Return True 
         End If 
        Next 
        Return MyBase.ProcessCmdKey(msg, keyData) 
       End If 
      End If 
     ElseIf keyData = (Keys.Control Or Keys.A) Then 
      ' Process the select all 
      Me.SelectAll() 
     Else 
      Return MyBase.ProcessCmdKey(msg, keyData) 
     End If 
    End Function 

End Class 

如果你只是想用一個文本框和按鍵事件,你可以做這樣的事情。我只有兩個字在我的白名單,你會想包括所有的字符,你會想包括:

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

    ' Test white list, this is only 0 and 1 which are ASCII 48 and 49 
    Dim allowedChars() As String = {Chr(48), Chr(49)} 

    If allowedChars.Contains(e.KeyChar) Then 
     ' Setting handled to true stops the character from being entered, remove this or execute your code 
     ' here that you want 
     e.Handled = True 
    End If 

End Sub 

如果你想炭代碼的列表,你可以讓他們在這裏:

http://www.asciitable.com/

希望這會有所幫助。 ;-)

+0

非常感謝:D –

+0

非常歡迎。 –