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