e se volessi accettare anke il punto e virgola nel testo dove metto i numeri ?![]()
e se volessi accettare anke il punto e virgola nel testo dove metto i numeri ?![]()
Per XVincentX.
Sara anche semplice, ma il codice che hai postato, nel caso d'inserimento di una parte NON numerica cancella tutto quello che è stato inserito, e NON la sola parte non numerica.![]()
LM
Non è assolutamente vero, azzera solo il carattere ultmo digitato
che semplicemente non viene riportato nel controllo.
Non c'è lo sbiancamento del controllo, per cui quello
precedentemente inserito RIMANE.
Guardache LMondi si riferiva a :
e non acodice:private sub text1_change() if not isnumeric(text1.text) then text1.text = "" end if end sub
Se, però utilizzi l'intercettazione del tasto (_KeyPress) alloracodice:Private Sub txtCampo_KeyPress(KeyAscii As Integer) If (((KeyAscii < 48) Or (KeyAscii > 57)) And ((KeyAscii <> 13) And (KeyAscii <> 8) And (KeyAscii <> 188) And (KeyAscii <> 46))) Then KeyAscii = 0 End If End Sub
devi prendere in considerazione quanto ti dice yyzyyz sui punti e
virgole, e quello che, giustamente, ti evidenzia xegallo, sul fatto
che devi gestire anche l'eventuale copia+incolla, tranite l'evento
_Change.
Ciao,![]()
Ciao, Brainjar
ok.
ke ne pensate di questa soluzione? :master:
codice:Private Sub text1_change() Dim txtlen As Double On Error Resume Next If Not IsNumeric(Text1.Text) Then txtlen = Len(Text1.Text) - 1 Text1.Text = Mid(Text1.Text, 1, txtlen) Text1.SelStart = txtlen + 1 End If End Sub
Sei punto e a capo. Con copia ed incolla inserisci una frase
da 50 lettere. Dopo il controllo te ne restano 49.
La soluzione deve essere sicuramente più sofisticata.
Ciao,![]()
Ciao, Brainjar
Ciedo scusa per la svista.
La funzione
Ha un comportamento 'ricorsivo', quindi va benissimo.codice:Private Sub text1_change() Dim txtlen As Double On Error Resume Next If Not IsNumeric(Text1.Text) Then txtlen = Len(Text1.Text) - 1 Text1.Text = Mid(Text1.Text, 1, txtlen) Text1.SelStart = txtlen + 1 End If End Sub
Grande.
Ciao,![]()
Ciao, Brainjar