Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo su una TextBox

Ciao a tutti, vi spiego il mio problema.
Avrei bisogno di effettuare un controllo sui dati inseriti in una
textBox.
Io vorrei che accettasse solo numeri, lo spazio (8), ed il punto (46). 
Fin qui tutto ok, ma in più vorrei che il punto potesse essere accettato
solo una volta.
Faccio un esempio: 11.33 ->OK
                   1.1.3 -> ERRORE
Grazie a tutti per l'attenzione
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Grazie a tutti per l'attenzione
Dimenticavo..... in VB6


                   1.1.3 -> ERRORE
Fai un ciclo di Instr e 'conta i giri'.
Giri=0
Stringa=Textbox1.Text
Do while Instr(Stringa, ".")>0
    Giri=Giri+1
    Stringa=Right$(Stringa, len(stringa)-Instr(Stringa,"."))
Loop
Ciao
Alberto
-- 
E tutto mi sembrava andasse bene... 

 Loop
Oppure usa Split:
If UBound(Split(Textbox1.Text, ".")) > 1 Then
    ' Hai inserito troppi punti!!!
End If
Bye
Raf

solo una volta.
Beh, potresti agire ex ante e utilizzare l'evento KeyPress e
verificare cosa viene digitato, e in base a cosa viene digitato
potresti decidere cosa far passare e cosa no (io in genere uso questo
approccio, piuttosto che un'analisi a fine digitazione).
--
Ciao!
Luca Menegotto


Penso che lui intendesse proprio durante la digitazione, altrimenti il 
problema sarebbe banalmente risolto con IsNumeric()
In genere comunque e' difficile riuscire a a controllare tutto in anticipo, 
e IMHO la cosa migliore e' combinare i controlli in digitazione (senza 
complicarli troppo, solo come aiuto all'utente) con uno di verifica alla 
fine... ci sono talmente tanti modi di "fregare" i vincoli nel KeyPress che 
non vale la pena spargere codice in giro per i la form quando un IsNumeric, 
IsDate e compagnia risolvono il problema.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown 

 problema sarebbe banalmente risolto con IsNumeric()
ISNumeric è localizzato.
Se l'OP voleva il punto (ma non la virgola), probabilmente ha necessità di 
qualcosa di delocalizzato (ad esempio vuole lavorarci con un Val, o vuole 
concatenare il textbox in una stringa Sql), oppure (visto che vuole 
accettare lo spazio), probabilmente il contenuto non è un numero ma, ad 
esempio, un codice o una sequenza di codici.
Considera anche che Isnumeric accetta la notazione scientifica, per cui non 
è risolutivo.
Inizialmente non avevo capito che fosse un controllo durante la digitazione, 
ma credo che il mio codicillo di esempio (come anche quello di Rafunk), 
possa benissimo essere inserito nel change del textbox.


Con isNumeric non si risolve il mio problema perchè inviando ad esempio
isNumeric(1.1.2) il valore restituito è true.


Si infatti ho fatto proprio cosě, l'ho inserito nella change della
TextBox
ed ha funzionato perfettamente ;)
Cmq grazie a tutti


 esempio isNumeric(1.1.2) il valore restituito è true.
Si, hai ragione perche' come giustamente dice Alberto e' localizzato e 
queindi sta considerando il . come separatore di migliaia, non come 
separatore decimale (dove invece IsNumeric("1,1,2") restituisce False)


 cui non è risolutivo.
Se il risultato e' da intendersi come numero, questo puo' essere corretto e 
non da fastidio, perche' anche una property/variabile numerica accetta 
quella notazione... a meno che il contenuto del textbox non venga schiaffato 
direttamente in una istruzione SQL o cose del genere dove forse nascono 
problemi


 ha scritto nel messaggio 
news:c3cb9160f21f669ba9e...@mygate.mailgate.org...


 Et voilà!
E' una battuta?
Uno scherzo?
Un'idiozia?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Grazie a tutti per l'attenzione
Usare una instr, come detto da altri. Ovviamente, siccome vuoi che possa
essere inserita solo una volta, niente ciclo.
Se invece deve poter essere inserita piu' volte, niente ciclo for. Usa uno
while con due controlli di uscita.
Ciao.


 Un'idiozia?
Per nulla. Ti garantisco che funziona benissimo!
Bye
Raf
P.S. Degnarsi di verificare il codice direttamente prima di emettere certe
sentenze è sano ed aiuta molto ad evitare figuracce.


Se fosse un'idiozia la capiresti... quindi te la spiego:
Split ti restituisce un array spezzando la stringa in corrispondenza dei 
puntini:
 nessun puntino-> arry di 0 elementi;
 1 puntino-> arry di 1 elementi;
 2 puntini-> arry di 2 elementi;
 eccetera
 Ubound ti dice l'indice massimo dell'array di cui sopra, che è uno di meno 
degli elementi dell'array, quindi esattamente uguale al numero di puntini.
Rispetto alla tua soluzione mi pare ben più semplice e anche più efficente.
Elef