VBATools

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.

Obrazek

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).

Obrazek

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ł).

Obrazek

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:

Obrazek

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.