Better Call Zam
Textbox que sólo permita números C#
Es común necesitar un Textbox que sólo permita la inserción de números, por ejemplo si se trata de una caja que contenga un número de teléfono o una cantidad con punto decimal.
Para este caso lo que puedes hace es recorrer el string de lo que se escribió y comparar los caracteres o aplicar el evento KeyDown, el cual ni siquiera permite que se escriba todo lo ajeno a lo que definas. Este código no permite escribir más que números:
private void tbMovil_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key >= Key.D0 && e.Key <= Key.D9 || e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
e.Handled = false;
else
e.Handled = true;
}
Y este código te permite escribir la coma "," porque en mi caso es el separador decimal.
private void tbPrecio_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key >= Key.D0 && e.Key <= Key.D9 || e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
e.Handled = false;
else if (e.Key == Key.OemComma)
e.Handled = false;
else
e.Handled = true;
}
Si estás seguro que tu caracter decimal es el punto, usa este. Además, está validado que sólo deje introducir un punto decimal ( "." = Key.OemPeriod). La variable puntos es global.
private void tbPrecio_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key >= Key.D0 && e.Key <= Key.D9 || e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
e.Handled = false;
else if (e.Key == Key.OemPeriod)
{
if (puntos == 0)
{
e.Handled = false;
puntos = 1;
}
else
{
e.Handled = true;
}
}
else
e.Handled = true;
}
Cómo saber si debo usar la coma "," o el punto "." como separador decimal por código
Yo sabía que era la coma porque el sistema es para inglés gringo y por lo tanto en el código anterior sólo deja escribir la coma y no el punto pero podrías saber cuál se usa en la región que sea en la que se use el sistema con:
string decimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
string numero = tbPrecio.Text.TrimEnd(' '); ;
numero.Replace(".",decimalseparator); //Aquí se remplaza el punto por el separator que está en uso según la región
Por supuesto debes tener cuidado en caso de que lo vayas a guardar en SQL ya que igual debes usar el formato que SQL pide, según lo hayas definido.