FM20 – TextBox
TextBox to kontrolka ActiveX z zestawu biblioteki FM20 (standardowy przybornik) dla kompilacji Office 32/64 bit.
Cóż można napisać o Textboxie. To kontrolka, w którą użytkownik może wpisać dowolny tekst. Przechować dane w tym polu i przekazać np do bazy danych lub natychmiast użyć. Oczywiście nie tylko używamy wprowadzony doń danych ale i możemy do niej zwrócić dane z bazy do edycji lub jako informacja tylko do odczytu.
Czyli przy użyciu parametru kolor wypełnienia BackColor możemy podświetlić go na szaro oraz parametru Locked, gdzie możemy uniemożliwić użytkownikowi wpisanie lub Enabled zmianę znajdującego się w niej tekstu oznaczając go jako nieaktywny.
Podobnie stosowanie wypełnienia innym kolorem stosowane jest np kiedy chcemy zwrócić uwagę użytkownikowi, aby wpisał do tego pola jakies dane (np stosując kolor żółty), zamiast wyświetlać za każdym niewypełnionym polem komunikat Msgbox z uwagą o takim obowiązku. (podobnie kolor pomarańczowy lub jasno czerwony używany jest aby zwrócić uwagę na błąd wypełnienia).
Aby sprawdzać czy dane wpisywane w kontrolkę są prawidłowe, można użyć procedury zdarzeniowej, której celem będzie reagowanie na każdy wpisany znak. Załóżmy że wpisana ma być liczba:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = weryfikuj(KeyAscii) 'funkcja sprawdzająca nr znaku
Const znaki$ = " ./:*;?+'%!#$&()" 'znaki specjalne z poza granicami funkcji
Dim x%
For x = 1 To Len(znaki) 'jeżeli wpisano to nie zwracaj znaku do kontrolki
If Chr(KeyAscii) = Mid(znaki, x, 1) Then
If InStr(1, TextBox1.Text, Mid(znaki, x, 1)) >= 0 Then KeyAscii = 0
End If
Next
If Chr(KeyAscii) = "," Then 'jeśli przecinek to pozwól tylko 1 raz
If InStr(1, TextBox1.Text, ",") >= 2 Then KeyAscii = 0
End If
If Chr(KeyAscii) = "-" Then 'jeśli minus to pozwól tylko z przodu
If InStr(1, TextBox1.Text, "-") <> 0 Or Len(TextBox1.Text) >= 1 Then KeyAscii = 0
End If
End Sub
Function weryfikuj(KeyAscii)
Select Case KeyAscii
Case Is > 58 'granica max
weryfikuj = 8: Beep: Exit Function 'sygnał dźwiękowy
Case 46 'inne przypadki na konkretne nr znaków
weryfikuj = 46: Exit Function
Case Is < 48 'granica min
weryfikuj = 8:
End Select
weryfikuj = KeyAscii
End Function
Poza takimi prozaicznymi właściwościami jak formatowanie komórki (wielkość czy kolor czcionki), co może być ciekawą i przydatną właściwością tej kontrolki to blokada powodująca spodziewaną ilość znaków MaxLenght (czyli wiemy ile cyfr ma regon, nip czy nr telefonu), albo możliwość wprowadzenia enterów EnterKeyBehavior wraz z MultiLine, czy użycie wbudowanej, jedno znakowej maski, służącej do markowania wpisywanych znaków. Jest nim PasswordChar często używany w formie zachowania poufności wprowadzanych danych (czyli haseł).
Na pole można nakładać inne maski, te jednak trzeba zaprogramować klasą, ponieważ nie ma uniwersalnego pola właściwości, które by stosowało regułę lub kombinację znaków nałożonych na to pole. Jednym z prostszych sposobów jest modyfikacja pola podczas wychodzenia z kontrolki:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox1.Text) = 10 And IsNumeric(TextBox1) = True Then
TextBox1.Text = Left(TextBox1.Text, 3) & "-" & Mid(TextBox1.Text, 4, 2) & "-" & _
Mid(TextBox1.Text, 6, 2) & "-" & Right(TextBox1.Text, 3) 'jeśli zawiera same cyfry to wprowadzamy kreski
ElseIf Len(TextBox1.Text) = 13 And Len(Replace(TextBox1.Text, "-", "")) = 10 And _
IsNumeric(Replace(TextBox1.Text, "-", "")) = True Then
'nic nie robimy bo wpisany nip jest zgodny ze wzorcem choć wypadałoby sprawdzić czy prawidłowy
Else
MsgBox "Wpisz NIP składający się z 10 cyfr!", vbExclamation, "VBATools.pl" 'uwaga dla użytkownika
End If
End Sub
Czyli wychodząc z pola tekstowego, po wpisaniu np przez klikniecie na przycisk lub przejście do innego pola, inicjujemy zdarzenie kontrolki sprawdzające prawidłowość wpisu i powodującego zmianę treści:
To tylko jeden z przykładów zastosowania. Takimi mogą być oczekiwanie na wpisanie tylko znaków numerycznych (lub usunięcie wszystkich jakie nie są numeryczne) lub po sprawdzeniu funkcją czy dane wpisane są zgodne z oczekiwaniami (np czy pole przeznaczone na adres zawiera kod pocztowy, albo czy nr. telefonu ma tyle cyfr ile obowiązuje w danym kraju).
Jeśli uważasz że pokazane materiały są godne polecenia – podziel się tą wiadomością z innymi pozostawiając odnośnik to tego materiału.
(c) Shon Oskar – http://VBATools.pl
Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.