Textbox Validation Function - Check it out
I have been noticing that a few persons have posted questions on how they can validate text box contains. I had to design a funcionfor a cusomer that would only allow the user to enter data in the following formats:
E05-09812A
WS0/3456SA
So I came up with the following function. This function allows the programmer the ability to control what type of alphanumeric character is entered into a text box at a particular postion in the text box.
VB Code:
Private Function ValidateKey(TextBoxName As TextBox, Keyascii As Integer) As Integer
Dim strTagFilter As String
Dim intPosition As Integer
If Keyascii = 8 Then
Exit Function
Else
If TextBoxName.Tag & "" = "" Then
Exit Function
Else intPosition = Len(TextBoxName.Text) + 1 'Sets up the Tag pointer
strTagFilter = Mid(TextBoxName.Tag, intPosition, 1) 'Gets the Validator Code
If intPosition > Len(TextBoxName.Tag) Then 'Only allows the same number of characters
'that are contained in the Tag Property
Keyascii = 0 'If so doesn't allow anymore characters
Else
TextBoxName.SelStart = intPosition 'Positions alphanumeric
'character after previous
'alphanumeric character
Select Case strTagFilter
Case "A", "a" 'Only allows Letters
If (Keyascii >= 65 And Keyascii <= 90) Or _
(Keyascii >= 97 And Keyascii <= 122) Then
Keyascii = Keyascii
If strTagFilter = "A" Then 'Capitalize the letter if "A"
If (Keyascii >= 97 And Keyascii <= 122) Then
Keyascii = Keyascii - 32 ' Capitalize the first charater
End If
End If
Else
Keyascii = 0 'invalid character
End If
Case "0" 'Only allows numbers
If (Keyascii < 48 Or Keyascii > 57) Then
Keyascii = 0 'invalid character
End If
Case Else
If Keyascii <> Asc(strTagFilter) Then 'Only allows the same alphanumeric
'Character (i.e. /-_=+&*()#$@!{}|\)
Keyascii = 0 'invalid character
End If
End Select
End If
End If
End If
End Function
... and you call it like this ...
VB Code:
Private Sub Text1_KeyPress(Keyascii As Integer)
Call ValidateKey(Me.Text1, Keyascii)
End Sub
So to allow the following number to be entered into a text box US35-39234B then enter th following into that textboxes Tag Property: AA00-00000A
Re: Textbox Validation Function - Check it out
You should've posted it in the Code Bank instead.
Re: Textbox Validation Function - Check it out
Quote:
Originally Posted by RhinoBull
You should've posted it in the Code Bank instead.
Yes I probably should have, but I wanted to make sure that the code was solid and that I didn't over look anything before it was put into the Codebank.
Re: Textbox Validation Function - Check it out
If you're already passing the TextBox to the function why do you also need to pass the text and the tag? Can't the function read those properties by itself?
Re: Textbox Validation Function - Check it out
you could have simply used this:
Code:
Private Sub Command1_Click()
'E05-09812A
'WS0/3456SA
If UCase$(Text1.Text) Like "[A-Z]##-#####[A-Z]" _
Or UCase$(Text1.Text) Like "[A-Z][A-Z]#/####[A-Z][A-Z]" Then
MsgBox "okay"
End If
End Sub
Re: Textbox Validation Function - Check it out
Quote:
Originally Posted by Joacim Andersson
If you're already passing the TextBox to the function why do you also need to pass the text and the tag? Can't the function read those properties by itself?
Joacim,
Thanks for your analysis, I have made the changes to my original post (they are indicted in red).
Re: Textbox Validation Function - Check it out
Quote:
Originally Posted by ZeBula8
you could have simply used this:
Code:
Private Sub Command1_Click()
'E05-09812A
'WS0/3456SA
If UCase$(Text1.Text) Like "[A-Z]##-#####[A-Z]" _
Or UCase$(Text1.Text) Like "[A-Z][A-Z]#/####[A-Z][A-Z]" Then
MsgBox "okay"
End If
End Sub
ZeBula8,
Thanks for your post, but the purpose of this function was so that I could put it into a module make it Pubic so that I could use it through out my app. Your solution appears to work but it will allow both formated numbers to be entered into a textbox but I could not with out re-writting your code exclude one of them while allowing the other. My function gives me more flexibiity in that I can use it over and over without changing anythig but the Tag property of the textbox. So that I can go from: C98-1234 to 09-234322 without changing my code or writting separate code for each text box (less code = smaller app). Anyway I appreciate your opinion.
Thanks!!