Ciao, se hai voglia di darti un'occhiata alle regular expression, ti conviene usare quelle, altrimenti ti posto una piccola funzione, l'ho provata sul campo..e sembra che funzia (è buttata giù adesso e pertanto ci sara' da perfezionarla).
codice:
Public Function CheckDigit(ByVal KeyAscii As Integer, txt As TextBox, Optional numDec As Integer = -1) As Integer
Dim keyVal As Integer
Dim posV As Integer
keyVal = 0
Select Case KeyAscii
Case 48 To 57 'numeri da 0 a 9
keyVal = KeyAscii
Case 44, 46 'virgola e punto
'controlla se sono ammessi decimali...
If Not numDec = 0 Then
'controlla che già non ci sia una virgola
If InStr(txt.Text, ",") = 0 Then
'per evitare che la virgola non sia il primo carattere digitato
If txt.SelStart > 0 Then
'controlla che se il primo carattere è il "-" la virgola non può essere il secondo carattere
If Not (Left(txt.Text, 1) = "-" And txt.SelStart = 1) Then
If KeyAscii = 46 Then 'se un punto lo cambia in virgola (questo per usare il tastierino numerico e usare il punto per la virgola)
keyVal = 44
Else
keyVal = KeyAscii
End If
End If
End If
End If
End If
Case 45 'il meno..per imputare importi negativi
If InStr(txt.Text, "-") = 0 Then
If txt.SelStart = 0 Then 'deve essere il primo carattere
keyVal = KeyAscii
End If
End If
Case 8 'tasto backspace
'************************
'controllare se c'è una virgola e cancellando il carattere vada a finire in posizioni sbagliate es. ,45 oppure -,45
'************************
keyVal = KeyAscii
End Select
If (numDec >= 0) And ((keyVal >= 48) Or (keyVal = 44)) Then
posV = InStr(txt.Text, ",")
If posV > 0 Then
If Len(Mid(txt.Text, posV + 1)) >= numDec Then
keyVal = 0
End If
ElseIf keyVal = 44 Then
posV = txt.SelStart
If Len(Mid(txt.Text, posV + 1)) >= numDec Then
txt.Text = Left$(txt.Text, posV + numDec)
txt.SelStart = posV
End If
End If
End If
CheckDigit = keyVal
End Function
i parametri da passare sono:
- il codice asci del tasto premuto
- il nome della textBox
- opzionale, quanti decimali vuoi (di default non c'è limite)
va richiamata nell'evento KeyPress della TextBox dove immetti i numeri:
codice:
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = CheckDigit(KeyAscii, Text1, 2)
End Sub
Sicuramente c'è una parte da ultimare...ed è quella che ti ho commentato nel caso in cui si preme il tasto BackSpace. Lascio a te il compito di ultimarla..