Ultime notizie
Home » Tips and Tricks » C# Custom Controls : Come creare una TextBox che accetti solo caratteri di tipo numerico

C# Custom Controls : Come creare una TextBox che accetti solo caratteri di tipo numerico

Ecco un semplice esempio su come creare un C# Custom Controls che accetti solo caratteri utilizzando come linguaggio di programmazione Visual C#.

Come prima cosa aggiungiamo al nostro progetto una nuova classe che chiameremo “NumericTextBox”  facendo in modo che la stessa  erediti dalla classe TextBox in questo modo :

namespace ControlliPersonalizzati
{
    public class NumericTextBox : TextBox{ }
}

Ora aggiungiamo una proprietà alla classe di tipo bool che ci servirà ad indicare se nella TextBox sono permessi o meno numeri negativi :

public bool AccettaNegativi { get; set; }

A questo punto dobbiamo intercettare l’evento KeyPress del textbox, e lo facciamo nel costruttore della nostra classe in questo modo :

public NumericTextBox()
{
   this.KeyPress += new KeyPressEventHandler(NumericTextBox_KeyPress);
}


Infine implementiamo il metodo NumericTextBox_KeyPress, nel quale grazie all’ aiuto  classe NumberFormatInfo andiamo a discriminare i caratteri del separatore decimale e dei segni positivo/negativo della cultura correntemente impostata:

void NumericTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
            string separatoreDecimale = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
            string segnoNegativo = NumberFormatInfo.CurrentInfo.NegativeSign;
            string segnoPositivo = NumberFormatInfo.CurrentInfo.PositiveSign;
            //se è un carattere di tipo controllo
            if (char.IsControl(e.KeyChar))
                return;
                //se è il segno negativo
            else if (AllowNegative && e.KeyChar.ToString() == segnoNegativo && ((TextBox)sender).Text == string.Empty)
                return;
                //se è il segno positivo
            else if (e.KeyChar.ToString() == segnoPositivo && ((TextBox)sender).Text == string.Empty)
                return;
                //se è il carattere di separatore decimale e questo non è già presente
            else if (e.KeyChar.ToString() == separatoreDecimale && !((TextBox)sender).Text.Contains(separatoreDecimale))
                return;
                //se non è un carattere numerico
            else if (char.IsNumber(e.KeyChar))
                return;
                //in tutti gli altri casi
            else
                e.Handled = true;
}

Ora, aggiungendo la nostra NumericTextBox alla barra degli strumenti, possiamo usarla come un qualsiasi componente.



About Luigi Melisi

Analista Programmatore Senior, Team Leader in svariati progetti, con esperienza decennale in analisi, progettazione e sviluppo di software gestionale desktop e web, di E-Commerce e sistemi di Content Management System.In questi anni ho utilizzato in prevalenza tecnologie Microsoft (Visual C#, ASP.NET, SQL Server, Visual Studio, Windows Mobile, ecc.) e programmazione orientata agli oggetti, ma ho maturato esperienza anche in altre tecnologie come Java e PHP.Attualmente mi occupo di consulenza informatica, di sviluppo software gestionale personalizzato, realizzazione di Siti Web, di sistemi di Content Management System. ed E-Commerce su misura del cliente.

Check Also

Come ricavare il dominio di primo livello dell’indirizzo attuale

Se ti si presenta la necessità di sapere come ricavare il dominio di primo livello …

Un commento

  1. Che direttiva using devo inserire per poter utilizzare .KeyPress, KeyPressEventHandler, KeyPressEventArgs, AllowNegative.

    Grazie

Lascia un commento

%d blogger hanno fatto clic su Mi Piace per questo: