PDA

View Full Version : VB - Inserimento Dati


Bouba_Diop
13-11-2003, 08:45
Ciao

Va bene utilizzare "TextBox" per fare inserimento dati da parte dell'utente?
Vorrei inserire un numero, però, se inserisco una lettera (o un numero troppo grande), il programma giustamente va in crash.

Grazie ciao

bsummer
13-11-2003, 10:11
La textbox va bene.
Per convertire una stringa in un numero puoi utilizzare diverse funzioni.

"Val" ad esempio data una stringa alfanumerica ti restituisce solo le cifre.

Una cosa più accurata la puoi ottenere con le funzioni di conversione tipo (cbyte, cInt, cLng, ecc...) in quanto se l'espressione passata come parametro non è inclusa nell'intervallo di validità (ad esempio, cByte accetta valori da 0 a 255, cInt da -32768 a +32767 e così via) viene generato un errore intercettabile con il noto "on error goto" e quindi gestibile.

Una soluzione + raffinata ancora può essere il gestire l'evento keypressed associato alla textbox, nel quale viene fatto un filtraggio dei tasti premuti in modo da evitare la pressione di quelli non numerici. Inoltre si può fare un controllo sulla lunghezza della stringa in modo tale da evitare che il valore inserito sia eccessivamente grande.

La soluzione più semplice resta cmq l'uso delle funzioni di conversione tipo;)

Aloha!

Bouba_Diop
13-11-2003, 11:31
grazie:)

allora:

1- ho provato la prima soluzione e mi pare di aver capito dalle mie prove, che se ad esempio scrivo "123adc", mi restituisce "123". Se però scrivo "1s23f", mi restituisce "1".

2- La seconda mi funziona se non metto alcuna lettera. Se metto qualche carattere si imbestialisce:). Come si gestisce l'errore? Immagino che la risposta sia "cerca". Adesso cerco un pò ;)

3- Ho cercato un pò nella guida "keypressed" associato al textbox, ma ancora nulla. Ho trovato keypressed con java....

bsummer
13-11-2003, 11:57
L'evento è keypress...non keypressed come ti avevo erroneamente scritto :D

Per la gestione dell'errore...esempio:


private sub esempio()

on error goto errore


dim b as byte
dim s as string

s = "123c"
b = cByte(s)
exit sub

errore:
msbox("errore stringa non numerica")
end sub


Appena la vByte si accorge che l'espressione passata non è valida l'esecuzione salta alla label "errore", come è indicato dall'espressione "on error goto".

Cerca nella guida la voce "on error" per vedere come gestire i vari casi...

Aloha!

VICIUS
13-11-2003, 12:41
perchè non filtrare tutti i caratteri che non sono nel intervallo 0..9 mentre sono digitati nella textbox. se non sbaglio al evento keypress viene dato in pasto anche il codice del tasto che è stato premuto nella variabile KeyCode. ora con un semplice if controlli se il codice è un numero altrimenti lo poni uguale a 0 cosi non verra inserito.

ciao ;)

bsummer
13-11-2003, 13:04
Originariamente inviato da VICIUS
perchè non filtrare tutti i caratteri che non sono nel intervallo 0..9 mentre sono digitati nella textbox....[]

Questo approccio l'avevo suggerito pure io :D

Tuttavia, io credo che usare l'uno o l'altro metodo dipenda da come si voglia gestire la cosa.

Filtrare i tasti = impedire all'utente di inserire valori potenzialmente dannosi.
C'è da dire che a seconda delle esigenze, filtrare i tasti non vuol dire cavarsela con un semplice if...se ci sono numeri troppo grandi? se ci sono numeri con la virgola (filtrare anche il tasto "." ma stando attenti a non premerlo due volte...)? la casisitica non è enorme ma ci sono tante piccole cose da guardare.

Usare le funzioni di conversione = permettere all'utente di inserire valori errati, ma si può gestire il tutto molto semplicemente.

Però filtrare i tasti è molto + fico :D

Aloha!

Bouba_Diop
13-11-2003, 18:55
grazie. adesso funziona:)

Vi chiedo un'altra cosa: Ho fatto una media tra diversi numeri e ho visualizzato il risultato su una label. Visualizzarlo lo vosualizza giusto, però solo numeri interi. Come devo fare per visualizzare anche la virgola? La mia variabile "media" l'ho assegnata come Double.

grazie