Validar textbox numerico en C#

Iniciado por oscarj24, 18 Abril 2010, 22:52 PM

0 Miembros y 2 Visitantes están viendo este tema.

oscarj24

Hola, sere claro, tengo que validar un textbox, que solo acepte numeros en double. El problema está en que quiero escribir un real y debo poner el "." si es que se trata de un decimal o el signo "-" si es que es un numero negativo. Intente hacer un ejemplo pero tiene errores en la linea 6, aqui esta:

Código (csharp) [Seleccionar]
private void soloNumeros(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Back
|| e.KeyChar == (char)Keys.Delete
|| e.KeyChar == (char)Keys.Left
|| e.KeyChar == (char)Keys.Right
|| IsNumber(e.KeyChar.ToString()))
{
TextBox obj = sender as TextBox;

if (e.KeyChar == '.' && obj.Text.IndexOf('.') > 0)
e.Handled = true;
else
e.Handled = false;
}
else
e.Handled = true;
}

Shell Root

Podes crear una expresión regular algo así:
Reg-Exp: ^(?:\+|-)?\d+\.\d+$
PoC:
-1.2
1.2
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

oscarj24

no entendi lo que quisiste explicarme, si puedes implementalo en el codigo que coloqué a ver si asi te comprendo mejor, gracias

Shell Root

Creo que eso es masomenos así, lo codee de memoria, así que puede tener errores.

Código (csharp) [Seleccionar]
string strCadena = '-1.2';
string strRegExp = "^(?:\\+|-)?\\d+\\.\\d+$";

if (System.Text.RegularExpressions.Regex.IsMatch(strCadena, strRegExp)){
  System.Console.WriteLine("Valido");
}else{
  System.Console.WriteLine("Invalido");
}
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

oscarj24

tiene errores jaja, perdoname pero no comprendo tu logica y bueno.. gracias de todas formas, aun asi no lo logre  :huh:

Shell Root

wtf! apoco nunca haz usado expresiones regulares?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Keyen Night

#6
oscarj24, Date una vuelta y vuelves ._.

http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular.

Si se te hace muy dificil entonces:
Código (C#) [Seleccionar]

            string Comprobar = "Hola";
            long Dft = 0;

            bool EsNumerico = long.TryParse(Comprobar, out Dft);

            MessageBox.Show(Convert.ToString(EsNumerico));


Donde EsNumerico es True si es numero y False si no es.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

JuanRaGD

#7
Hola.
No te entendi bien la pregunta, pero si lo q quiere es q solo ingrese double en el txtbox  yo lo aria asi:


double numero = 0;
        try
        {
            numero = Convert.ToDouble(TextBox1.Text);
        }
        catch
        {
            Label1.Text = "numero invalido";
        }


Bueno espero que te sirva   :)
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no"
– Albert Einstein

raul338

Código (csharp) [Seleccionar]

bool Validar Numero(string text) {
  return System.Text. RegularExpressions.Regex.IsMatch(text, @"^[+-]?\d+(?:\.\d+)?$");
}


con eso validas la entrada, ahora si quieres validar "en vivo", usa un masked textbox o similar, o si quieres hacerlo a tu estilo puedes probar

Código (csharp,7) [Seleccionar]

private void soloNumeros(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Back
|| e.KeyChar == (char)Keys.Delete
|| e.KeyChar == (char)Keys.Left
|| e.KeyChar == (char)Keys.Right
|| int.TryParse(e.KeyChar.ToString())
{
TextBox obj = sender as TextBox;

if (e.KeyChar == '.' && obj.Text.IndexOf('.') > 0)
e.Handled = true;
else
e.Handled = false;
}
else
e.Handled = true;
}


Espero que te sirva, lo hice todo al vuelo

oscarj24

Hola, gracias.. pero preferi hacerlo a mi estilo
pero al momento de la compilacion me salto un error en este punto:

Código (csharp) [Seleccionar]
int.TryParse(e.KeyChar.ToString()))

ya que dice:

'Ninguna sobrecarga para el método 'TryParse' acepta '1' argumentos'

espero me puedas ayudar y gracias  ;D