c# funzione che permette di inserire solo numeri in una TextBox

Standard

In c# purtroppo nel framework .net 3.5 non c’è un metodo che permette verificare se un valore (stringa) contiene o meno solo numeri (cosa che invece è presente in VisualBasic), ciò ad esempio potrebbe essere utile quando si deve creare una textbox in cui vuole fare inserire dall’utente solo valori numerici (come ad esempio un prezzo in euro). Naturalmente la funzione che i permette di “filtrare” i valori numerici in una stringa in c# è presto fatta:

1
2
3
4
5
6
7
8
9
10
11
12
static public bool IsNumeric(string valore)
{
try
{
Int32.Parse(numero);
return true;
}
catch (FormatException)
{
return false;
}
}

Questa funzione così da sola ci è poco utile, in quanto non ci permette in real-time di verificare se in una TextBox si stanno inserendo valori numerici o meno, e più precisamente non ci permette di evitare che l’utente non inserisca lettere o caratteri speciali. Ci viene incontro quest’altra funzione, che usa la precedente per ovviare a questi problemi:

1
2
3
4
5
static public void soloNumeri(KeyPressEventArgs ev)
{
if (!IsNumeric(ev.KeyChar.ToString()) && (((int)ev.KeyChar) != 8))
ev.Handled = true;
}

Con questa funzione introduciamo la gestione dell’evento KeyPress, che è quello che ci permette in real time di verificare cosa viene inserito dall’utente. Richiamando quindi questa funzione all’interno dell’evento KeyPress di una qualsiasi Textbox (e non solo) riusciamo quindi ad evitare che l’utente inserisca un carattere diverso da un numero o eventualmente dal backslash per la correzione, ecco il codice:

1
2
3
4
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
soloNumeri(e);
}

Ecco fatto, adesso siamo riusciti costringere all’utente di dover inserire solo numeri evitando di dover gestire successivamente tutte le eccezzioni del caso.

4 thoughts on “c# funzione che permette di inserire solo numeri in una TextBox

  1. Dedo, quando la finirai di programmare in italiano?
    Quando indenterai il codice ?

    L’esempio del “prezzo in euro” non funziona perche’ diversi “locale” usano diverse forme di rappresentazione dei numeri (esempio 5,10 Euro e 5.10 Dollari) e se fai il cast to int, non e’ detto che tu voglia sempre ottenere quello che vuoi.

    Perche’ “static public bool” e non “public static bool” ? E’ buona norma raggruppare i metodi come “public”, “internal” e “private” all’interno del sorgente e a loro volta raggrupparli per “static” o meno. Rende piu’ facile individuare la natura del metodo.

    Perche’ non limitare l’input type a numeric invece di scrivere tutto cio’?

    Perche’ usare Int32.Parse che genera un exception quando puoi usare Int32.TryParse e ottenere direttamente il risultato in boolean?

    Perche’ lo statement dell’if non e’ racchiuso tra { } ?

    Nella condizione dell’if stai usando due volte “ev.KeyChar” : a mio parere sarebbe piu opportuno avere una variabile con il suo contenuto valorizzata prima dell’if e fare il test con essa; cio’ rende la condizione piu’ semplice da leggere.

    E… “eccezione” si scrive con una “Z” !

  2. L’esempio del prezzo in euro vale naturalmente prevedendo opportunamente di inserire degli interi, ad esempio creando una textbox per i valori interi, l’esempio non serve per inserire prezzi in euro ma valori numerici. Per quanto riguarda l’indentazione naturalmente il codice è indentato ma il plugin di wordpress non prende bene il carattere /t, per quanto riguarda il programmare in italiano, l’italiano è la mia lingua e ognuno programma con il linguaggio che ritiene opportuno nella lingua che ritiene opportuna. Per tutto il resto grazie dei consigli l’utente potrà sicuramente scegliere di seguire i tuoi consigli, naturalmente dando a 100 programmatori una lavoro da fare ognuno lo farà in modo diverso ottenendo 100 codici differenti, la programmazione è bella per questo.

  3. Catia

    Spieghi le cose in modo molto efficace: arrivi gradualmente al risultato. In questo modo fai apprezzare le potenzialità del linguaggio.

Comments are closed.