ProgrammazioneSviluppatore di applicazioni desktop in Visual Basic

Come implementare la gestione dell'input dell'utente (ad esempio, da un TextBox) tenendo conto della verifica che sia stato inserito un numero e prevenire errori di conversione dei tipi in Visual Basic?

Supera i colloqui con l'assistente IA Hintsage

Risposta.

Nella gestione dell'input dell'utente è fondamentale prevenire errori di conversione dei tipi quando l'utente, ad esempio, inserisce un non numero in TextBox. Questo è cruciale per garantire la robustezza dell'applicazione.

Storia della questione:

In VB6 e VB.NET gli errori di conversione (ad esempio, utilizzando CInt o Val) portavano a situazioni di arresto anomalo. Successivamente sono stati introdotti mezzi più sicuri, come Integer.TryParse.

Problema:

Quando si tenta di convertire dati non validi (lettere, simboli speciali, stringhe vuote), i metodi standard (CInt, CDbl) sollevano un'eccezione. Di conseguenza, l'applicazione può andare in crash.

Soluzione:

Per una conversione sicura, utilizzare TryParse. Restituisce un successo logico nell'operazione di conversione di stringa in numero e previene eccezioni.

Esempio di codice:

Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"Hai inserito il numero: {number}") Else MessageBox.Show("Errore: non è stato inserito un numero") End If

Caratteristiche principali:

  • TryParse non genera eccezioni in caso di insuccesso
  • Consente una reazione flessibile all'input non valido
  • Completamente compatibile con la localizzazione e i formati

Domande trabocchetto.

Cosa restituirà la funzione Val("123abc") e perché potrebbe essere pericoloso?

Val("123abc") restituirà 123, ignorando i caratteri non numerici dopo il numero, il che porta a errori se l'utente ha accidentalmente inserito un carattere extra.

È possibile convertire una stringa vuota usando CInt("")?

No, la funzione solleverà un'eccezione InvalidCastException.

Qual è l'approccio da scegliere per i numeri in virgola mobile tenendo conto della localizzazione?

Usare Double.TryParse specificando CultureInfo, poiché in alcune località la virgola , è il separatore della parte frazionaria, in altre è il punto ..

Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)

Errori comuni e anti-pattern

  • Utilizzo di Val per ottenere un numero con risultati incontrollati
  • Applicazione di CInt senza controllare il contenuto
  • Mancanza di messaggi utente per il controllo degli errori di input

Esempio dalla vita

Caso negativo

Lo sviluppatore converte direttamente il testo dal campo in numero: Dim n = CInt(TextBox1.Text) senza controllo.

Pro:

  • Codice minimo

Contro:

  • Il programma va in crash con un input non valido
  • Nessun messaggio di errore

Caso positivo

Si utilizza TryParse con avviso all'utente su un input errato (vedi esempio sopra).

Pro:

  • Applicazione robusta
  • Esperienza utente migliorata

Contro:

  • Necessità di aggiungere più codice per la gestione degli errori e la localizzazione dei messaggi