以下是一種只能檢測字母的方法,但您的問題遠不止於此。
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
複雜的格式。我在這方面並不是很專業,但是要知道對於字母和數字應該如何相當容易。
使用REGEX。 'IsNumeric',等等等等 - 這不是幫助 –
我嘗試使用REgex但不允許我,並且如果輸入REGEX給我錯誤。也e.keychar給錯誤,因爲沒有定義... – bcool
如果你試圖使用'正則表達式',它不起作用,那麼你做錯了。如果我們不知道你做了什麼或錯誤信息是什麼,那我們怎麼知道你做錯了什麼? – jmcilhinney