Domanda Risolto TextBox che accetti solo numeri

minotaurus7

Utente Silver
30 Gennaio 2013
44
19
2
64
Un saluto a tutti.....
mi sto avvicinando al linguaggio #C usando Visual Studio 2019...
La mia domanda è la seguente:
come posso creare una textbox che accetti solo numeri?
L'istruzione la inserisco nell'evento textbox_TextChanged, oppure nell'evento textbox_KeyPress???
Grazie fin da ora a tutti.
 
Ultima modifica:
Puoi farlo con entrambi:

C#:
private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "[^0-9]"))
    {
        MessageBox.Show("Please enter only numbers.");
        textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
    }
}


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
        (e.KeyChar != '.'))
    {
            e.Handled = true;
    }
}

L' unica cosa da notare è che nel KeyPress non ci sta supporto alle operazioni del copia e incolla dentro il TextBox
 
Grazie milleeeee..........
Voglio solo dirti che a me funziona solo la prima.... il keypress no.
sicuramente sto omettendo qualcosa. Se hai la pazienza di spiegarmi!!!
Comunque Grazie la prima è perfetta...
 
Mi ero complicato la vita con la forma compatta di KeyPress, errore mio (pensavo si aveva l'auto setting di Handled)
Nel primo caso si ha un check tramite regular expression tra il testo del TextBox e la stringa che rappresenta only digits, quindi funziona direttamente dato che se non si ha il match ti fa visualizzare il messaggio di errore con relativa cancellazione.

Quindi:

C#:
private void textBox1_TextChanged(object sender, EventArgs e) // Al cambio di testo viene effettuato un catching
{
    if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "[^0-9]")) #Controllo con [^0-9] sul prossimo carattere inserito
    {
        MessageBox.Show("Please enter only numbers."); // Il carattere non è un numero, visualizziamo il messaggio
        textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1); // Rimozione del carattere errato
    }
}

Nel secondo caso si fa il catch sul tasto, quindi bisogna lavorare sui KeyPressEvent. Qui non controlliamo ciò che è stato scritto ma quale tasto è stato digitato, il punto serve solamente se vuoi indicare dei valori al di fuori di quelli interi (Tipo 10.1) ma se non è questo il tuo caso, puoi levare la condizionee.