Obbiettivo :Essre sicuro che non vengano scritti altri caratteri.
Metti uno zero (a seconda del caso) nella tag del controllo, la routine di controllo nell'evento Change, se quello che hai combacia con la maschera che vuoi con il like allora e' ok, e inserisci il valore che hai sul momento nella tag ancora, se non lo e' ripeschi il valore della tag e lo riassegni al text del controllo.
Il controllo lo puoi fare con isnumber, aiutato da una prova precedente tipo
If TextBox1.text = "," Then
TextBox1.text = "0,"
Endif
Do While Left(TextBox1.text, 2) = "00"
TextBox1.text = Mid(TextBox1.text, 2)
Loop
Do While Left(TextBox1.text, 3) = "-00"
TextBox1.text = "-0" & Mid(TextBox1.text, 3)
Loop
'qui ci metti tutti i like che vuoi, che devono comprendere anche i numeri parziali ovviamente
dim procedi as boolean
if textbox1.text like cosi' o cosa' o pomi'
'con le regexp duro fatica, figurati a scriverne una a mente che prenda piu' casi
'in ogni caso puoi fare un ciclo: se tieni in valor in array che puoi richiamare a seconda del caso, definiti globali, puoi
'anche riusarli in tutto il programma
' i numeri accettabili se non mi sfugge qualcosa sono, mentre li scrivi, "-", "-0", "0,"
procedi=true
endif
if procedi=true then
TextBox1.tag = TextBox1.text
else
TextBox1.text = TextBox1.tag
endif
Ovviamente, qui c'e' il controllo con la virgola come separatore, ma devi controllare quale adopera il sistema dove lo usi, in una funzione all'inizio che lo metta in una variabile. Funziona anche per il copia incolla. Ricorda che e' un numero anche 1.0344e15, quindi se vuoi evitare la c controllo da fare. Alla fine, prima dei calcoli, devi vedere ancora se questi sono numeri, ma con una sola prova, giusto per vedere che non ci sia un numero incompleto, tipo
-0.Una versione semplificata e' questa, per i numeri non esponenziali: ben lungi dall'essere perfetta, sembra quasi funzionare, ma ovviamente intendi tutto come un suggerimento e non come una cosa da fare copia e incolla.
If TextBox1.text = "," Then
TextBox1.text = "0,"
Endif
Do While Left(TextBox1.text, 2) = "00"
TextBox1.text = Mid(TextBox1.text, 2)
Loop
Do While Left(TextBox1.text, 3) = "-00"
TextBox1.text = "-0" & Mid(TextBox1.text, 3)
Loop
If InStr(TextBox1.text, "e") Then
TextBox1.text = Replace(TextBox1.text, "e", "")
Endif
If IsNumber(TextBox1.text & "0") = False Then
TextBox1.text = TextBox1.tag
Endif
TextBox1.tag = TextBox1.text