none
Coma de decimal en teclado numerico RRS feed

  • Pregunta

  • Buenas a todos, 
    Me pasa que mi app (en C#) me toma el punto del teclado numérico como punto de miles y no como COMA decimal que seria lo normal y lo que necesito. 

    Ya revise la configuración regional del sistema pero eso me parece que no es porque en otra aplicación como por ej. la calculadora de Windows, se comporta como debe el teclado numérico...

    Entonces NO SE porque me toma como miles... 

    Como dato adicional les puedo decir que todos los números que se ingresan, los hago pasar por esta función para comprobar que sean números validos: 

    public static string DevolverConvertidoEnMoneda(string CajaOLabel, out string CajaOLabelConvertida)
            {
                //CajaOLabel = "0,00";
                decimal numero = default(decimal);
                bool bln = decimal.TryParse(CajaOLabel, out numero);
    
                if ((!(bln)))
                {
                    // No es un valor decimal válido; limpiamos el control.
                    CajaOLabel = "0,00";
                }
                else
                {
                    CajaOLabel = numero.ToString("0.00");
                }
    
                return CajaOLabelConvertida = CajaOLabel;
            }
    Cualquier sugerencia es bienvenida
    viernes, 21 de abril de 2017 20:44

Respuestas

  • [...] me toma el punto del teclado numérico como punto de miles y no como COMA decimal que seria lo normal [...]

    No, no es lo normal desde el punto de vista del teclado (aunque la aplicación lo necesite, en cuyo caso es responsabilidad de la aplicación el sustituirlo -- eso es lo que hace internamente la calculadora de Windows).

    Piensa que, aunque la parte derecha del teclado solemos llamarla "teclado numérico", en realidad no es numérico, él solamente devuelve caracteres. Y los caracteres los puede usar como quiera el programa que los recibe, por ejemplo, puedes estar escribiendo un texto y usar ese punto para indicar el final de una frase. El teclado no "sabe" si lo vas a usar en un campo numérico o en un campo de texto (prueba con Notepad en lugar de con la calculadora).

    Si el programa quiere interpretarlo como "coma", debe hacer una sustitución del carácter "punto" por una "coma", no puede esperar que el teclado haga esa sustitución por si mismo. Una forma de hacerla es implementar un manejador para el evento TextChanged del textbox donde esperas un número, y en el manejador hacer un reemplazo: textBox1.Text=textBox1.Text.Replace(".", ",");.

    sábado, 22 de abril de 2017 6:42
    Moderador

Todas las respuestas

  • [...] me toma el punto del teclado numérico como punto de miles y no como COMA decimal que seria lo normal [...]

    No, no es lo normal desde el punto de vista del teclado (aunque la aplicación lo necesite, en cuyo caso es responsabilidad de la aplicación el sustituirlo -- eso es lo que hace internamente la calculadora de Windows).

    Piensa que, aunque la parte derecha del teclado solemos llamarla "teclado numérico", en realidad no es numérico, él solamente devuelve caracteres. Y los caracteres los puede usar como quiera el programa que los recibe, por ejemplo, puedes estar escribiendo un texto y usar ese punto para indicar el final de una frase. El teclado no "sabe" si lo vas a usar en un campo numérico o en un campo de texto (prueba con Notepad en lugar de con la calculadora).

    Si el programa quiere interpretarlo como "coma", debe hacer una sustitución del carácter "punto" por una "coma", no puede esperar que el teclado haga esa sustitución por si mismo. Una forma de hacerla es implementar un manejador para el evento TextChanged del textbox donde esperas un número, y en el manejador hacer un reemplazo: textBox1.Text=textBox1.Text.Replace(".", ",");.

    sábado, 22 de abril de 2017 6:42
    Moderador
  • Si funciona pero el problema es que me vuelve el cursor al principio... 

    Por ej. quiero poner 20.50 
    me transforma el punto en coma pero al escribir rapido me queda asi 50,20 porque despues del reemplazo me vuelve el curso al principio.. 
    Alguien sabe como evitar eso ?
    miércoles, 3 de mayo de 2017 19:32
  • Se me ocurren un par de soluciones: Una es que después de cambiar el texto cambies la posición del punto de inserción usando las propiedades que el textbox tiene para eso (si no recuerdo mal, SelectionIndex y SelectionLength, o algo parecido).

    Pero mejor que eso sería usar el evento KeyPress (en lugar del TextChanged) y ahí dentro examinar la tecla pulsada y si es el punto cambiarla por la coma dentro del argumento "e". Esto no debería alterar el punto de inserción del textbox.

    jueves, 4 de mayo de 2017 13:27
    Moderador