Input controllato

lunedì 10 luglio 2006 - 16.39

max1850 Profilo | Junior Member

Salve. Uso VB NET 2005.
Ho realizzato una classe derivata da textbox in cui cerco di controllare l'input dell'utente agendo sull'evento OnKeyDown. Nonostante sono riuscito a impostare diverse comportamenti, non riesco a gestire le valute. Nella fattispecie vorrei impedire all'utente l'inserimento di caratteri e il raddoppio del segno decimale.
Il problema sta nel fatto che l'utente potrebbe cancellare il carattere decimale (la virgola) ed in questo caso la classe dovrebbe permettermi di inserirne uno nuovo.
Qualche consiglio?
Grazie
Max!
Max!

alextyx Profilo | Expert

Io ho fatto una classettina che uso come controllo personalizzato, ma niente vieta che tu estragga il codice e lo metta negli eventi di una o più textbox 'normali'. La chiamo TextBoxMonetaria, perchè è predisposta per accettare cifre fino a 999.999.999,9999 sia nella nostra notazione che in quella americana 999,999,999.9999

I separatori delle migliaia li mette (e li toglie) automaticamente. La virgola o il punto decidi tu dove metterlo, ma che tu prema "," o "." te lo converte da sola nel separatore decimale in uso. Puoi anche decidere se avere 2, 3 o 4 cifre decimali. Ovviamente accetta solo numeri e controlla anche il copia/incolla e la cancellazione di più cifre evidenziate. Non l'ho testata moltissimo, però. Se è quello che cerchi, puoi farmi da beta tester
E' senz'altro migliorabile, ma è una delle prime cose che ho fatto in vb.net e anche se ho operato un primo refactoring, avrebbe senz'altro bisogno anche di un secondo, ma ... ora non ne ho il tempo!

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

max1850 Profilo | Junior Member

Ciao!
Ho potuto vedere solo ora il tuo codice...
La textbox sembra funzionare perfettamente ! Test più "hard" spero di farli nei giorni seguenti.
Cmq sei stato bravissimo a farla ..io non ci sarei riuscito di certo!
Grazie dell'aiuto!
Ciao
Max!

alextyx Profilo | Expert

Grazie dei complimenti Max...troppo buono!
Cmq, resto in attesa dei risultati. La versione più vecchia, fatta con istruzioni ormai improponibili, l'ho usata su un programmetto gestionale e sembrava funzionare. Questa è la versione più elaborata, ma l'ho provata solo x pochi minuti, quindi potrebbe scappare fuori qualche bug. Se accadrà, fammelo sapere. Ciao.

Andy Profilo | Senior Member

Ciao Alexty mi sono permesso di utilizzare anche io il tuo controllo, spero non ti dispiaccia =)

E' effettivamente utile e molto funzionale..ma..in qualità di buon Beta tester ti segnalo subito un buggettino fastidioso....

Se l'utente digita caratteri non numerici (e sai bene che di sicuro succede) il controllo si blocca e non fa più nulla ..
se hai tempo prova a dare un'occhiata, tanto la soluzione è immediata ^_^

Spero di essere stato utile...

Ciao


Andy

max1850 Profilo | Junior Member

Ciao ragazzi!
La textboxmonetaria a me funziona bne anche con i caratteri, non mi si blocca! Questo è forse il primo test che ieri ho fatto
E' strano che ad Andy si blocca...
Sto ancora testandola e sembri funzionare bene.
L'unico inconveniente sembra essere quando l'utente preme prima lo "0", poi la virgola e poi un carattere. A quel punto la textbox lascia lo "0" mentre si digitano altri numeri, ma basta premere CANC che si cancella.
Fatemi sapere
Ciao
Max!

alextyx Profilo | Expert

Per parafrasare un tale più famoso di me: Lasciate che i beta tester vengano a me!
Più siete. meglio è. Il mio controllo è a disposizione di chiunque, purchè non mi chiediate i danni se fa qualche 'birbonata'!
Allora...nemmeno a me risulta che si blocchi, nè inputando lettere, nè sparando qualche carattere strano, neppure tentando di incollare del testo col copy/paste. Se hai modo di applicarlo in un progettino il più semplice possibile, dove ti crea questo problema, potresti spedirmelo:

alex@mainsistemi.it

Comunque prova ancora, perchè codesto comportamento proprio non riesco a vederlo..... oppure accade con un carattere particolare che potrei non aver provato?

Attendo vostre nuove...sperabilmente buone!

P.S.:

"L'unico inconveniente sembra essere quando l'utente preme prima lo "0", poi la virgola e poi un carattere. A quel punto la textbox lascia lo "0" mentre si digitano altri numeri, ma basta premere CANC che si cancella."

Grazie della segnalazione. Alla prima occasione buona ci darò un'occhiata, effettivamente è un comportamento un po' fastidioso che potrei eliminare!

Andy Profilo | Senior Member

Azz...stavo già preparando la lettera di risarcimento..LOL scherzo, figurati non riesco nemmeno a pensare che qualcuno possa farlo...

Cmq tornando a noi, pensandoci bene era lo stesso caso di Max1850, cmq ho risolto da solo, se uno inserisce del testo non numerico resetto la casella, molto banalmente.

Grazie ancora..

A presto
Andy

alextyx Profilo | Expert

Ok.... non so cosa intendi per resettare la casella, comunque farò in modo che si comporti da brava bambina, cioè che semplicemente rifiuti il testo, senza spostare il caret come invece fa adesso. Se nel frattempo arriveranno segnalazioni di altri bug, farò un intervento cumulativo, altrimenti provvederò alla correzione nei prossimi giorni, forse anche stasera se trovo un po' di tempo.
Grazie a entrambi per il vostro contributo.

max1850 Profilo | Junior Member

Ciao alextyx!
Ieri ho testato la tua textbox e sembra che l'unico difetto sia quello che ti ho segnalato in precedenza.
Aspetto tue notizie sulla modifica del controllo.
Ciao
Max!

alextyx Profilo | Expert

Grazie Max, penso che ormai riaprirò la libreria nel fine settimana. Probabilmente è una cosa da 2 minuti....una volta che uno è rientrato con la testa nella logica del codice. Intanto ringrazio sia te che Andy. Grazie a voi, una volta corretta e ri-testata (non quella di Zidane, intendo ri-collaudata ) la textbox, saprò di avere un controllino efficace, che potrò esporre al pubblico giudizio senza tema d'infamia (a parte lo stile del codice, ma è il risultato che conta!).

Andy Profilo | Senior Member

di nulla, è un piacere...è già efficace, l'errore bisognava andare a cercarselo hehehe...

Cmq x la cronaca x "resettare" la cella intendo riportare il valore a 0, e chi s'è visto s'è visto

A presto..
Andy

max1850 Profilo | Junior Member

Di niente!
Per trovare l'errore ho dovuto "smanettarci" un po' ma è stato un piacere fare da beta tester!
Attendo il tuo post con la correzione effettuata così implementerò la tua textbox nel mio progettino vb!

Ciao e grazie
Max!

alextyx Profilo | Expert

Ho rimpiazzato, nel mio primo post, il vecchio codice con quello nuovo. Non è stato un lavoro facilissimo, nè velocissimo, perchè mi sono accorto di un paio di bugs e poi perchè ho voluto migliorare alcuna cosette, comunque ora mi sembra vada meglio, anche se x fare veramente bene, dovrei riscrivere tutto partendo a pulito e ributtando dentro solo i pezzi di codice che ritengo ancora validi. Diciamo che è un lavoro 'slow and dirty' ma che per adesso bisognerà accontentarsi!
Attendo i vostri pareri. Buon lavoro!

Andy Profilo | Senior Member

>Ho rimpiazzato, nel mio primo post, il vecchio codice con quello
>nuovo. Non è stato un lavoro facilissimo, nè velocissimo, perchè
>mi sono accorto di un paio di bugs e poi perchè ho voluto migliorare
>alcuna cosette, comunque ora mi sembra vada meglio, anche se
>x fare veramente bene, dovrei riscrivere tutto partendo a pulito
>e ributtando dentro solo i pezzi di codice che ritengo ancora
>validi. Diciamo che è un lavoro 'slow and dirty' ma che per
>adesso bisognerà accontentarsi!
>Attendo i vostri pareri. Buon lavoro!

Ciao..innanzitutto grazie mille per la velocità del tuo intervento, hai anche fatto troppo =)

Già così direi che è ottimale, niente che non funzioni...direi A+!!


Grazie mille, a presto..
Andy

max1850 Profilo | Junior Member

Ciao!
Confermo ciò che ha detto Andy: non dovrebbero esserci altri bug "cruciali".
Hai fatto veramente un ottimo lavoro!
Appena avrò un po' di tempo implementerò nella mia classe il tuo codice, creando un controllo a se stante, con delle proprietà (come la scelta del numero dei decimali, il cambio del colore di sfondo quando prende il fuoco, ecc..) settabili in maniera visuale dalla finestra proprietà.
A lavoro ultimato sarà a disposizione di tutti, così volendo, possiamo sviluppare insieme una textbox veramente utile per la "comunità".
Grazie ancora!
Ciao a tutti
Max!

alextyx Profilo | Expert

Beh, la scelta del numero dei decimali c'è già, solo che è limitata a 2,3 o 4, cioè i classici x uso 'contabile'. Se pensi di estendere il tutto ad altre possibilità, meglio ancora! Resto in attesa di eventuali novità. Buon lavoro ad entrambi e a chiunque voglia aggregarsi!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5