[C# Custom Controls] : Come creare una TextBox che accetti solo caratteri di tipo numerico
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.
![Offerte Last Minute YouBuy.it last [C# Custom Controls] : Come creare una TextBox che accetti solo caratteri di tipo numerico](http://images.youbuy.it/adv/last.jpg)
Che direttiva using devo inserire per poter utilizzare .KeyPress, KeyPressEventHandler, KeyPressEventArgs, AllowNegative.
Grazie