none
No se como solucionar este error en c# RRS feed

  • Pregunta

  • Saludos amigos del foro les traigo un inconveniente, tengo 3 funciones para validar mediante el KeyPress si ingresa un numero una letra o decimales, ahora las funciones las pueden ver aqui: 

            //Funcion que acepta solo decimales
            public static bool Solo_Decimales(char e, string valor)
            {
                var decimalSeparator = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator;

                return !(char.IsDigit(e) || e == (char)Keys.Back || !(char.IsControl(e)) || 
                    ((e.ToString() == decimalSeparator) && valor.Contains(decimalSeparator)));
            }

            //Funcion que acepta solo numeros
            public static bool Solo_Numeros(char e)
            {
                return !(char.IsDigit(e) || e == (char)Keys.Back || !(char.IsControl(e)));
            }

            //Funcion que acepta solo texto
            public static bool Solo_Texto(char e)
            {
                return !(char.IsLetter(e) || e == (char)Keys.Back || !(char.IsControl(e)));
            }

    y tengo este error porque no se como invocar la funcion:

    ahora he probado con e.KeyChar y funciona pero mal pues cuando hago el debug si ingreso por ejemplo si escojo la función Solo_Texto(char e) y ingreso la letra a el debug me dice que el valor de e es = 95"a" ese es el problema que me devuelve un numero con una cadena juntas, me podrán ayudar por favor.

    viernes, 15 de diciembre de 2017 4:00

Respuestas

  • En un hilo anterior te indiqué la manera correcta de reutilizar código para estos casos: crear un control WindowsForm a partir de la clase TextBox (herencia) y sobreescribir el evento OnKeyPress, de hecho podrías agregar otros miembros que consideres oportuno, pero...

    Veamos, respecto al código que adjuntas:

    - Método IsValidChar()

    public static class libreria
    {	
    	public enum ValueType { Entero, Decimal, Alfanumérico }
    	public static bool IsValidChar(char e, ValueType tipo, string texto = null)
    	{
    		if (tipo == ValueType.Decimal)
    		{
    			var decimalSeparator = System.Threading.Thread.CurrentThread.CurrentCulture
    			.NumberFormat.NumberDecimalSeparator;
    
    			return (char.IsDigit(e) || char.IsControl(e) || ((e.ToString() == decimalSeparator)
    						&& !texto.Contains(decimalSeparator)));
    		}
    		else if (tipo == ValueType.Entero)
    		{
    			return (char.IsDigit(e) || char.IsControl(e));
    		}
    		return true;
    	}        
    }

    - Invocar método

    public void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    	e.Handled = !libreria.IsValidChar(e.KeyChar, libreria.ValueType.Decimal, ((TextBox)sender).Text);
    	//e.Handled = !libreria.IsValidChar(e.KeyChar, libreria.ValueType.Entero);
    	//e.Handled = !libreria.IsValidChar(e.KeyChar, libreria.ValueType.Alfanumérico);
    }


    • Marcado como respuesta Rudolf Heiner viernes, 15 de diciembre de 2017 5:32
    viernes, 15 de diciembre de 2017 4:50

Todas las respuestas

  • En un hilo anterior te indiqué la manera correcta de reutilizar código para estos casos: crear un control WindowsForm a partir de la clase TextBox (herencia) y sobreescribir el evento OnKeyPress, de hecho podrías agregar otros miembros que consideres oportuno, pero...

    Veamos, respecto al código que adjuntas:

    - Método IsValidChar()

    public static class libreria
    {	
    	public enum ValueType { Entero, Decimal, Alfanumérico }
    	public static bool IsValidChar(char e, ValueType tipo, string texto = null)
    	{
    		if (tipo == ValueType.Decimal)
    		{
    			var decimalSeparator = System.Threading.Thread.CurrentThread.CurrentCulture
    			.NumberFormat.NumberDecimalSeparator;
    
    			return (char.IsDigit(e) || char.IsControl(e) || ((e.ToString() == decimalSeparator)
    						&& !texto.Contains(decimalSeparator)));
    		}
    		else if (tipo == ValueType.Entero)
    		{
    			return (char.IsDigit(e) || char.IsControl(e));
    		}
    		return true;
    	}        
    }

    - Invocar método

    public void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    	e.Handled = !libreria.IsValidChar(e.KeyChar, libreria.ValueType.Decimal, ((TextBox)sender).Text);
    	//e.Handled = !libreria.IsValidChar(e.KeyChar, libreria.ValueType.Entero);
    	//e.Handled = !libreria.IsValidChar(e.KeyChar, libreria.ValueType.Alfanumérico);
    }


    • Marcado como respuesta Rudolf Heiner viernes, 15 de diciembre de 2017 5:32
    viernes, 15 de diciembre de 2017 4:50
  • Gracias Willams, funciona muy bien, muchas gracias.

    Disculpa las molestias.

    saludos.

    viernes, 15 de diciembre de 2017 5:32