2015-06-19 35 views
-1

字母和其他功能的功能驗證文本框驗證像「AD12-XYX- 123-EFD-20」特定格式要創建一個只

我已經創建了功能數字只有」我想類似這樣的東西

Private Sub AllowNumericonly(Byval CTRL As control) 
    if not Isnumeric(ctrl.text) And Ctrl.test<> "" Then 

     MSGbox("Please enter numbers only." , Vbinformation) 
     ctrl.text = "" 
     ctrl.focus() 
    End if 
End sub 

請幫忙!

+1

使用REGEX。 'IsNumeric',等等等等 - 這不是幫助 –

+0

我嘗試使用REgex但不允許我,並且如果輸入REGEX給我錯誤。也e.keychar給錯誤,因爲沒有定義... – bcool

+0

如果你試圖使用'正則表達式',它不起作用,那麼你做錯了。如果我們不知道你做了什麼或錯誤信息是什麼,那我們怎麼知道你做錯了什麼? – jmcilhinney

回答

1

以下是一種只能檢測字母的方法,但您的問題遠不止於此。

Private Function IsAllAlpha(text As String) As Boolean 
    Return text.All(Function(ch) Char.IsLetter(ch)) 
End Function 

注意,我已經寫了Function而不是一個Sub。你原來的方法寫得不好。你實際上應該做的是處理控制器的Validating事件,驗證該事件處理程序中的控制內容,然後在True設置爲True(如果它失敗),在這種情況下,控件將保持焦點。驗證可以在適當的位置進行,也可以採用String並返回Boolean。例如:

Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating 
    e.Cancel = Not ValidateTextBox(TextBox1, AddressOf IsAllAlphaOrSpace, "Please enter only letters or spaces.") 
End Sub 

Private Sub TextBox2_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating 
    e.Cancel = Not ValidateTextBox(TextBox2, AddressOf IsAllNumeric, "Please enter only numeric digits.") 
End Sub 

Private Function ValidateTextBox(textBox As TextBox, validator As Func(Of String, Boolean), errorMessage As String) As Boolean 
    Dim isValid = validator(textBox.Text) 

    If Not isValid Then 
     textBox.SelectAll() 
     textBox.HideSelection = False 

     MessageBox.Show(errorMessage, "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Error) 

     textBox.HideSelection = True 
    End If 

    Return isValid 
End Function 

Private Function IsAllAlphaOrSpace(text As String) As Boolean 
    Return text.All(Function(ch) Char.IsLetter(ch) OrElse ch = " "c) 
End Function 

Private Function IsAllNumeric(text As String) As Boolean 
    Return text.All(Function(ch) Char.IsDigit(ch)) 
End Function 

Private Function IsAllAlphaNumeric(text As String) As Boolean 
    Return text.All(Function(ch) Char.IsLetterOrDigit(ch)) 
End Function 

如果你真的想驗證你那麼表明你可能會考慮使用MaskedTextBox或者使用一個Regex複雜的格式。我在這方面並不是很專業,但是要知道對於字母和數字應該如何相當容易。

+0

相當新,你的代碼有意義,但我認爲它在循環中,以及不允許輸入空格和退格鍵,也不會輸入int input允許在下一個文本框中進一步發展。在我的代碼中,我獲得了所有我想要的功能,但是你的代碼是個好主意...... – bcool

+0

「我認爲它會循環」,你認爲是錯誤的。 「不允許輸入空格和退格」,退格不是問題,因爲它不是最終文本中的字符,並且您沒有說您想要允許空格,但可以輕鬆修改代碼來執行此操作。 「在輸入int input後不能進一步進步」,這實際上是重點,即,除非他們輸入了適當的數據,否則不要讓用戶繼續前進。你爲什麼要讓他們?如果你真的想要,你可以用設計器配置來允許它,所以這不是問題。 – jmcilhinney

+0

感謝兄弟感謝你的迴應,但即使我輸入正確的int仍然沒有進一步發展,那爲什麼我認爲它是循環的。 – bcool