Controllare l’immissione dati è una fase molto importante nello sviluppo di un database.
Oggi impariamo come abilitare solo cifre in una casella di testo in Microsoft Access.
Credo che il modo più efficace dovrebbe essere quello di disabilitare ogni altro carattere, senza che venga visualizzato alcun messaggio all’utente. Così uno dei tipici errori, digitare una O al posto di uno 0, non avverrà più
Immaginiamo di avere una casella di testo chiamata txtImporto:
Ora sfruttiamo l’evento Su tasto giù / KeyDown.
Private Sub txtImporto_KeyDown(KeyCode As Integer, Shift As Integer) ' qui il codice per chiamare la funzione End Sub
Ogni volta che è premuto un tasto, implicitamente si verifica questo evento.
KeyCode è il valore intero (un numero, dunque) ricevuto dall’evento Su tasto giù / KeyDown.
Scriviamo ora una funzione che accetta solo una lista specifica di tasti. Se il tasto premuto non appartiene alla lista, sarà restituito uno 0, ossia nella casella di testo non sarà visualizzato alcun valore.
Function fncOnlyDigitsEnabled(v As Integer) As Integer ' 46= canc / delete ' 8 = backspace ' 13= return ' 9 = tab ' 39 = freccia a destra / right arrow ' 37 = freccia a sinistra / left arrow ' da 96 a 105 è il tastierino numerico / digit from numeric keypad ' da 48 a 57 gli altri tasti con le cifre / digits from keyboard ' 110 è la virgola da tastierino numerico / comma from numeric keypad ' 188 è la virgola / comma from keyboard If (v >= 96 And v <= 105) Or (v >= 48 And v <= 57) Or v = 9 Or v = 13 Or v = 8 Or v = 46 Or v = 39 Or v = 37 Or v = 188 Or v = 110 Then fncOnlyDigitsEnabled= v Else fncOnlyDigitsEnabled= 0 End If End Function
Come chiamare la funzione?
Private Sub txtImporto_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = fncOnlyDigitsEnabled(KeyCode) End Sub
Creando la funzione, specifichiamo che ha un argomento v di tipo intero. Il suo valore è passato quando chiamiamo la funzione nell’evento Su tasto giù / KeyDown della casella di testo:
Function fncOnlyDigitsEnabled(v As Integer) As Integer
La funzione restituisce un intero, che sarà assegnato a KeyCode:
Function fncOnlyDigitsEnabled(v As Integer) As Integer
Che cosa fa la funzione?
If (v >= 96 And v <= 105) Or (v >= 48 And v <= 57) Or v = 9 Or v = 13 Or v = 8 Or v = 46 Or v = 39 Or v = 37 Or v = 188 Or v = 110 Then
Effettua un test e verifica il valore di v (ricordate che v è KeyCode, ossia valore numerico corrispondente al tasto premuto). Se v è uno dei valori previsti, alla funzione viene assegnato il valore di v:
fncOnlyDigitsEnabled= v
altrimenti viene assegnato 0 (ossia in poche parole viene annullato l’effetto della digitazione del tasto).
fncOnlyDigitsEnabled= 0
L’elenco dei valori consentiti include:
- le cifre da tastiera
- le cifre da tastierino numerico
- la virgola per inserire i decimali (! occorre aggiungere il punto se abbiamo impostazioni internazionali con il punto come separatore dei decimali)
- il tasto TAB, altrimenti l’utente non può premere TAB per spostarsi al controllo successivo
- il tasto CANC e BACKSPACE altrimenti non può modificare il contenuto della casella di testo
- il tasto INVIO, altrimenti non può spostarsi al controllo successivo
Personalizzando questa lista è possibile affinare ulteriormente la funzione in base alle esigenze.