Prova questo: -
Public Sub TextBox1_Change()
Dim sNewText As String
Dim iChar As Integer
For iChar = 0 To Len(TextBox1.Text) - 1
If IsNumber(TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
Next
TextBox1.Text = sNewText
End
OK,
Public Sub TextBox1_Change()
Dim sNewText As String
Dim iChar As Integer
For iChar = 0 To Len(TextBox1.Text) - 1
If InStr("0123456789.", TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
Next
TextBox1.Text = sNewText
End
OK,
Public Sub TextBox1_Change()
Dim sNewText As String
Dim iChar As Integer
For iChar = 0 To Len(TextBox1.Text) - 1
If InStr(TextBox1.Text[0, iChar], ",") Then
If InStr("0123456789", TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
Else
If InStr("0123456789,", TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
End If
Next
TextBox1.Text = sNewText
End
Se lo completi così ti eviti anche la prima virgola (,1234):
Public Sub TextBox1_Change()
Dim s, sNewText As String
Dim iChar As Integer
s = TextBox1.Text
If s[0] = "," Then
TextBox1.Clear
Return
Endif
For iChar = 0 To Len(TextBox1.Text) - 1
If InStr(TextBox1.Text[0, iChar], ",") Then
If InStr("0123456789", TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
Else
If InStr("0123456789,", TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
End If
Next
TextBox1.Text = sNewText
End
Un po' meno codice: -
Public Sub TextBox1_Change()
Dim sNewText As String
If TextBox1.Text[0] = "," Then
TextBox1.Clear
Else
For iChar As Integer = 0 To Len(TextBox1.Text) - 1
If InStr(TextBox1.Text[0, iChar], ",") Then
If InStr("0123456789", TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
Else
If InStr("0123456789,", TextBox1.Text[iChar]) Then sNewText &= TextBox1.Text[iChar]
End If
Next
TextBox1.Text = sNewText
End If
End
Ancora meno:
Public Sub TextBox1_Change()
Dim sNewText As String
Dim bChar As Boolean
If TextBox1.Text[0] = "," Then
TextBox1.Clear
Else
For i As Integer = 0 To Len(TextBox1.Text) - 1
If TextBox1.Text[i] = "," And bChar Then Continue
If TextBox1.Text[i] = "," Then bChar = True
If IsNumber(TextBox1.Text[i]) Then sNewText &= TextBox1.Text[i]
Next
End If
TextBox1.Text = sNewText
End
A livello europeo si potrebbe risolvere così:
Private $sDec As String
Public Sub Form_Open()
Print System.Language
Select Case System.Language
Case "sv_SE.UTF-8"
$sDec = ":"
Case "en_US.UTF-8", "C"
$sDec = "."
Case Else
$sDec = ","
End Select
Print $sDec
End
Public Sub TextBox1_Change()
Dim sNewText As String
Dim bChar As Boolean
If TextBox1.Text[0] = $sDec Then
TextBox1.Clear
Else
For i As Integer = 0 To Len(TextBox1.Text) - 1
If TextBox1.Text[i] = $sDec And bChar Then Continue
If TextBox1.Text[i] = $sDec Then bChar = True
If IsNumber(TextBox1.Text[i]) Then sNewText &= TextBox1.Text[i]
Next
End If
TextBox1.Text = sNewText
End
C'è il problema della Svizzera che usa entrambi i separatori (virgola e/o punto) a seconda dei casi e li dipende a cosa è destinato il progetto.
Oppure si potrebbe dare la possibilità di scelta nelle preferenze...
Ciao .. solo numerio o solo lettere
Public Function Numeri()
If Key.Code >= 48 And Key.Code <= 57 Then
Else If key.Code = key.BackSpace Then
Else If key.Code = key.Delete Then
Else If Key.Code = Key.Left Then
Else If Key.code = Key.Right Then
Else If Key.Code = Key.Tab Then
Else
Stop Event
End If
End
Public Function Lettere()
If Key.code >= 64 And Key.Code <= 90 Then
Else If key.Code = key.BackSpace Then
Else If key.Code = key.Up Then
Else If Key.code = Key.Down Then
Else
Stop Event
Endif
End
da richiamare con l'evento keypress .
per la virgola automatica:
Public Sub TextBox_Change()
If TextBox.text > "" Then
TextBox.text = Format(Replace(TextBox.Text, ",", Null) / 100, "0.00") virgola in automatico inserimento euro
Endif
End