Appunti di Programmazione

Creative Commons License

TextBox: permettere l'inserimento dei soli numeri

Avete bisogno di inserire SOLO numeri o particolari caratteri in una TextBox? Quelle che allego rappresenta una valida soluzione. Si tratta di DISABILITARE tutti quei caratteri che non sono graditi impostandone il codice ASCII nell'evento TextBox.KeyPress. Non dimenticate di permettere l'uso di BACKSPACE per consentire all'utente di cancellare una cifra inserita erroneamente, e della virgola.

È però necessario aggiungere poche riche di codice per verificare che i caratteri immessi corrispondano ad un numero, perché purtroppo, c'è la possibilità che l'utente digiti male il carettere VIRGOLA[=separatore decimale], rendendo impossibile la conversione in un numero. (esempio: ,234,3 oppure 1200,,5)

Per l'esempio che segue avviate un nuovo progetto Windows_Form e collocate una TextBox al centro della finestra e un Button sotto di essa, quindi inserite il codice riportato di seguito.

Per il pulsante non scriverò alcuna riga di codice, poiché il suo scopo è quello di togliere il focus alla TextBox, quando lo si preme, e avviare l'evento TextBox.Validate per la verifica dei caratteri inseriti.

Per i codici ASCII dei caratteri guardare QUI.

Public Class Form1

    Dim risultato As Double = 0

        Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal _
                e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        'si permette l'uso di tutti i tasti NUMERICI [48-57], il tasto BACKSPACE [8] e il tasto VIRGOLA "," [44]
        'disabilitando la digitazione di tutti gli altri
        If (Asc(e.KeyChar) <8) OrElse _
           (Asc(e.KeyChar) > 8 AndAlso Asc(e.KeyChar) < 44) OrElse _
           (Asc(e.KeyChar) > 44 AndAlso Asc(e.KeyChar) < 48) OrElse _
           (Asc(e.KeyChar) > 57) Then e.Handled = True

    End Sub

    'controlla se nelle textbox di input vengono immessi valori numerici corretti
    Private Sub TextBox1_Validated(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles TextBox1.Validated

        'si verifica se i caratteri digitati dall'utente possono essere convertiti in numero Double
        'e in caso affermativo, si assegna tale valore alla variabile "risultato"
        If Double.TryParse(sender.text, risultato) = False And sender.text <> "" Then

            'se il risultato è "FALSE" si mostra a video un messaggio di errore
            MessageBox.Show("Inserire un numero valido", "Errore inserimento", MessageBoxButtons.OK)

            'si resetta la casella di testo
            sender.text = ""

            'si impone che la TextBox abbia il focus
            CType(sender, TextBox).Focus()

            'si esce dalla Sub
            Exit Sub

        End If

    End Sub

End Class