PDA

View Full Version : [VB.NET] Gestione degli errori


Traxsung
19-04-2007, 17:41
ho un piccolo problemino con un programmino in VB.
Praticamente ho una textbox dove all'interno devo insereri un valore numerico, e fin qui nessun problema.
Il numero che devo inserire non deve essere negativo, non deve essere nullo, ne tanto meno deve essere una stringa.

Per quanto riguarda la verifica se il numero è nullo (nel senso che non è stato inserito) ho scritto questo codice:


dim numero as double
numero = Convert.ToDouble(textbox1.Text)
if numero = "" Then
Msgbox (" Errore")
End if


Mentre se è negativo


dim numero as double
numero = Convert.ToDouble(textbox1.Text)
if numero < 0 then
Msgbox (" Errore")
End if


In entrambi i casi ottendo errore. Mentre per verificare se è una stringa, non so come fare


Potete aiutarmi ??

Grazie

Gremo
19-04-2007, 18:44
ho un piccolo problemino con un programmino in VB.
Praticamente ho una textbox dove all'interno devo insereri un valore numerico, e fin qui nessun problema.
Il numero che devo inserire non deve essere negativo, non deve essere nullo, ne tanto meno deve essere una stringa.

Per quanto riguarda la verifica se il numero è nullo (nel senso che non è stato inserito) ho scritto questo codice:


dim numero as double
numero = Convert.ToDouble(textbox1.Text)
if numero = "" Then
Msgbox (" Errore")
End if


Mentre se è negativo


dim numero as double
numero = Convert.ToDouble(textbox1.Text)
if numero < 0 then
Msgbox (" Errore")
End if


In entrambi i casi ottendo errore. Mentre per verificare se è una stringa, non so come fare


Potete aiutarmi ??

Grazie

ciao
ora non ho la possibilità di provare, cmq come prima idea mi viene in mente di
1) mettere Convert.ToDouble(textbox1.Text) in un try/catch
2) se non va in eccezione (stringa di testo oppure stringa nulla, immagino), allora l'utente ha inserito un numero, quindi si può procedere con il controllo del > 0
3) se va in errore, allora sicuramente il convert ha fallito perchè era una stringa, quindi avvertire l'utente

così

dim numero as double
Try
numero = Convert.ToDouble(textbox1.Text)
If numero < 0 Then
Msgbox ("Il numero deve essere maggiore di zero!")
Else
Msgbox ("Tutto ok!")
Catch ex As Exception
Msgbox ("Devi inserire un numero!")
End Try

wingman87
20-04-2007, 20:10
Non esiste più l'IsNumeric?

Traxsung
21-04-2007, 23:43
Gremo ho seguito il tuo consiglio e devo dire che funziona molto molto bene.
Solo che ho un piccolo problema.

nel seguente codice:


dim numero as double
Try
numero = Convert.ToDouble(textbox1.Text)
If numero < 0 Then
Msgbox ("Il numero deve essere maggiore di zero!")
Else
Msgbox ("Tutto ok!") <---- non deve visualizzarlo
Catch ex As Exception
Msgbox ("Devi inserire un numero!")
End Try


Come puoi vedere nel codice (il mio commento :P) vorrei che non visualizzasse
il messaggio però se lo tolgo non esegue poi l'operazione.
fai finta che sotto magari fa delle operazioni con numero... se tolgo la msgbox non me le esegue.
Consigli ??

Einstein
22-04-2007, 19:48
Ti consiglio di considerare il metodo Double.TryParse().
Il blocco Try/Catch dovrebbe essere usato solo per gestire delle eccezioni, cioè dei casi non previsti dal codice. Nel tuo caso puoi gestire il tutto tramite un If/Then, che fa risparmiare al CLR tutta la gestione dell'"infrastruttura" Try/Catch, facendoti guadagnare in prestazioni.
Ti consiglio anche di non usare i metodi inseriti per retrocompatibilità con VB6 come MsgBox: sostituiscilo con MessageBox.Show().

Ciao

Gremo
24-04-2007, 01:26
Ti consiglio di considerare il metodo Double.TryParse().
Il blocco Try/Catch dovrebbe essere usato solo per gestire delle eccezioni, cioè dei casi non previsti dal codice. Nel tuo caso puoi gestire il tutto tramite un If/Then, che fa risparmiare al CLR tutta la gestione dell'"infrastruttura" Try/Catch, facendoti guadagnare in prestazioni.
Ti consiglio anche di non usare i metodi inseriti per retrocompatibilità con VB6 come MsgBox: sostituiscilo con MessageBox.Show().

Ciao

era la prima soluzione che mi è venuta in mente :)
ho letto Double.TryParse() e va benissimo, non si smette mai di imparare :)

cmq il discorso sulle eccezioni è abbastanza personale

Einstein
24-04-2007, 08:23
cmq il discorso sulle eccezioni è abbastanza personale
In che senso?

Gremo
24-04-2007, 10:43
In che senso?

nel senso che, se le eccezioni sono per definizione situazioni al runtime non prevedibili, allora in questo particolare caso l'immissione di una stringa in un campo dove ci vanno solo double può essere risolta senza "sbagliare" in questo modo.
o no?

Einstein
24-04-2007, 12:20
In questo caso, sì.