Dim OldCarica As Single
Dim PercMax as Single
Dim PercMin as Single
'A livello General viene dimensionata una variabile in cui si copierà il valore della 'TextBox prima di ogni premere di un tasto. Questa variabile conterrà quindi sempre 'l'ultimo valore utile e potrà così essere usata per aggiornare la TextBox se il suo 'valore dovesse uscire dal range impostato.
'Le variabili PercMax e PercMin saranno impostate con i valori limite del range (nel mio 'caso, vengono letti da un file)
Private Sub txt_CaricaX100_KeyPress(KeyAscii As Integer)
'Prima di verificare la pressione di un nuovo tasto, e se nella TextBox c'è già un numero,
'viene salvato nella variabile di comodo OldCarica
If IsNumeric(txt_CaricaX100.Text) Then
OldCarica = txt_CaricaX100.Text
End If
'Il tasto premuto viene verificato nella Function NUMBERS_ONLY strutturata per accettare
'solo determinati valori
KeyAscii = NUMBERS_ONLY(txt_CaricaX100.Text, KeyAscii, True, True, False)
End Sub
Private Sub txt_CaricaX100_Change()
'Dopo la pressione di un tasto, attraverso l'evento Change si verifica lo stato della 'TextBox. Se il tasto premuto non è stato azzerato viene controllato che:
'(1) il dato nella TextBox non inizi con la virgola, nel caso la tolgo altrimenti la
'riga di comando "If txt_CaricaX100.Text > PercMax Then" genera un errore
If Left(txt_CaricaX100.Text, 1) = "," Then
txt_CaricaX100.Text = Mid(txt_CaricaX100.Text, 2)
End If
'(2) ci sia qualcosa nella TextBox altrimenti esce dalla subrutine.
If txt_CaricaX100.Text = "" Then Exit Sub
'(3) il valore non sia superiore al valore massimo consentito. Se è maggiore alla TextBox
'viene riassegnato il valore salvato nella variabile di comodo OldCarica
If (txt_CaricaX100.Text > PercMax) or (txt_CaricaX100.Text < PercMin) Then
txt_CaricaX100.Text = OldCarica
txt_CaricaX100.SelStart = Len(txt_CaricaX100.Text)
End If
End Sub
.
.
.
.
Public Function NUMBERS_ONLY(Value as String, KeyAscii As Integer, BkSpace As Boolean, Virgola As Boolean, Segno As Boolean) As Integer
If IsNumeric(Chr(KeyAscii)) Then
NUMBERS_ONLY = KeyAscii
Exit Function
End If
If BkSpace = True And KeyAscii = 8 Then
NUMBERS_ONLY = KeyAscii
Exit Function
End If
If Segno = True And KeyAscii = 45 Then
If InStr(Value, "-") = 0 Then
NUMBERS_ONLY = KeyAscii
Exit Function
End If
End If
If Virgola = True And (KeyAscii = 44 Or KeyAscii = 46) Then
KeyAscii = 44
If InStr(Value, ",") = 0 Then
NUMBERS_ONLY = KeyAscii
Exit Function
End If
End If
NUMBERS_ONLY = 0
End Function