Asegurarse de coger números correctos en un TextBox con las excepciones

2699 vistas

En el Validating de o de los TextBox....

Para números reales:



csharp
  1. private void TextBox_Validating(object sender, CancelEventArgs e)
  2. {
  3.         if (sender is TextBox)
  4.         {
  5.             TextBox T = ((TextBox)sender);
  6.             try
  7.             {
  8.               Double.Parse(T.Text);
  9.               epErrorProvider.SetError(T, "");
  10.             }
  11.             catch (ArgumentNullException)
  12.             {
  13.               epErrorProvider.SetError(T, "¡Tiene que introducir un valor!");
  14.               T.SelectAll();
  15.               e.Cancel = true;
  16.             }
  17.             catch (OverflowException)
  18.             {
  19.               epErrorProvider.SetError(T, "Número demasiado grande");
  20.               T.SelectAll();
  21.               e.Cancel = true;
  22.             }
  23.             catch (FormatException)
  24.             {
  25.               epErrorProvider.SetError(T, "Formato incorrecto");
  26.               T.SelectAll();
  27.               e.Cancel = true;
  28.             }
  29.         }
  30. }



Para números decimales:



csharp
  1. private void TextBox_Validating(object sender, CancelEventArgs e)
  2.       {
  3.         if (sender is TextBox)
  4.         {
  5.             TextBox T = ((TextBox)sender);
  6.             try
  7.             {
  8.               Decimal.Parse(T.Text);
  9.               epErrorProvider.SetError(T, "");
  10.             }
  11.             catch (ArgumentNullException)
  12.             {
  13.               epErrorProvider.SetError(T, "¡Tiene que introducir un valor!");
  14.               T.SelectAll();
  15.               e.Cancel = true;
  16.             }
  17.             catch (OverflowException)
  18.             {
  19.               epErrorProvider.SetError(T, "Número demasiado grande");
  20.               T.SelectAll();
  21.               e.Cancel = true;
  22.             }
  23.             catch (FormatException)
  24.             {
  25.               epErrorProvider.SetError(T, "Formato incorrecto");
  26.               T.SelectAll();
  27.               e.Cancel = true;
  28.             }
  29.         }
  30.       }



No tenemos que olvidarnos de escribir el carácter separador decimal correcto:



csharp
  1. private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
  2.       {
  3.         // almacenamos el separador decimal del sistema
  4.         char Separador = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];
  5.         // si se trata de un separador
  6.         if ((e.KeyChar == '.') || (e.KeyChar == ','))
  7.         {
  8.             // forzamos la escritura del separador correcto
  9.             e.KeyChar = Separador;
  10.         }
  11.       }



Para números enteros:



csharp
  1. private void TextBox_Validating(object sender, CancelEventArgs e)
  2.       {
  3.         if (sender is TextBox)
  4.         {
  5.             TextBox T = ((TextBox)sender);
  6.             try
  7.             {
  8.               Integer.Parse(T.Text);
  9.               epErrorProvider.SetError(T, "");
  10.             }
  11.             catch (ArgumentNullException)
  12.             {
  13.               epErrorProvider.SetError(T, "¡Tiene que introducir un valor!");
  14.               T.SelectAll();
  15.               e.Cancel = true;
  16.             }
  17.             catch (OverflowException)
  18.             {
  19.               epErrorProvider.SetError(T, "Número demasiado grande");
  20.               T.SelectAll();
  21.               e.Cancel = true;
  22.             }
  23.             catch (FormatException)
  24.             {
  25.               epErrorProvider.SetError(T, "Formato incorrecto");
  26.               T.SelectAll();
  27.               e.Cancel = true;
  28.             }
  29.         }
  30.       }