none
Problema con Textbox en VB2010 RRS feed

  • Pregunta

  • Por favor, alguien tendría la amabilidad si no es molestia de explicarme porque al querer llenar un Textbox con números, al insertar un punto decimal se ubica en principio delante de los números introducidos para despues saltar a su posición al seguir insertando números.

    Por ejemplo al querer introducir 25.54, la secuencia es 25, aquí al introducir el punto sucede esto .25, o sea se pone delante de los números y al introducir los otros dos números, en este caso 54, se ubica donde debería estar desde un principio y queda 25.54

    Aclero que esto sucede cuando se usa la opción de escribir de derecha a izquierda y usando Windows 7, con XP no sucede y ya Reinstalé/Reparé el VB 2010 Express.

     

    Gracias

    domingo, 28 de agosto de 2011 15:02

Respuestas

  • "Jorge0001" escribió:

    > PD: aclaro que estoy usando el RightToLeft porque
    > no me gusta las "rayitas" de formato que pone el
    > MaskedTextBox y tampoco me gusta que cuando se
    > escriben cifras aparezcan de izquierda a derecha
    > ya que no es así como nosotros escribimos
    > habitualmente y le quiero dar a las entradas
    > numéricas la misma forma que tiene la entrada de
    > datos en una calculadora, por ejmplo.

    Es decir, que no estás desarrollando una aplicación para un lenguaje árabe (por poner un ejemplo de una cultura donde se escribe de derecha a izquierda), si no que te gusta que los números vayan visualizándose como "aparecen en una calculadora". ¡Pues podías haber empezado "por el PD"! :-)))

    Para lo que deseas conseguir, olvídate de la propiedad RightToLeft y del control MaskedTextBox (que a mí tampoco me gusta), y simplemente establece la "alineación derecha" al control TextBox:

     TextBox1.TextAlign = HorizontalAlignment.Right

    ¡Fíjate que fácil! Ahora te aparecerán los números de derecha a izquierda, y cuando desees escribir una coma o un punto, éste se insertará a continuación del último carácter o número insertado.

    > y tampoco me gusta que cuando se escriben cifras
    > aparezcan de izquierda a derecha ya que no es así
    > como nosotros escribimos habitualmente

    Yo siempre (por no decir habitualmente), las cifras la escribo de izquierda a derecha:

         ------->
         929283938,32

    Las calculadoras si "escriben" de derecha a izquierda:

                  <-------
         929283938,32

       


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.




    lunes, 29 de agosto de 2011 6:01
    Moderador

Todas las respuestas

  • hola

    de casualidad usad un control MaskedTextBox con alguna mascara de decimales ?

    porque me suena extraño este comportamiento en un TextBox comun

    o quizas tiene codigo en algun evento como ser KeyPress, o KeyDown para aplciar formato al TextBox ? solo esto explicaria ese comportamiento

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 28 de agosto de 2011 15:24
  • "Leandro Tuttini" preguntó:

    > de casualidad usad un control MaskedTextBox con alguna
    > mascara de decimales ?
    >
    > porque me suena extraño este comportamiento en un TextBox comun

      ' Los elementos del control se alinean para admitir
      ' configuraciones regionales utiizando fuentes de
      ' derecha a izquierda.
      '
      TextBox1.RightToLeft = RightToLeft.Yes
    


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    domingo, 28 de agosto de 2011 15:33
    Moderador
  • Gracias por la respuesta Leandro, no, no se usa MaskedTextBox ni nada, de hecho te comento que cuando detecté el problema pensé que era por algo de alguna instrucción del programa que estoy haciendo que limita las entradas de los TextBox a números de un cierto rango, pero resulta que pruebo en una máquina con XP y funciona bien, vuelvo a la que tiene W7, que es una netbook con AMD y hace lo que comenté, con lo cual abrí un proyecto nuevo para probar y en un Windows Form solo puse un TextBox, lo seteé para entrar datos de derecha a izquierda solamente, o sea no hice nada más, compilé y quise meter el número que mencioné arriba a forma de prueba y hace exactamente lo que expliqué, la verdad estoy desconcertado....

    Jorge.

    domingo, 28 de agosto de 2011 15:33
  • Pero ¿deseas permitir escribir de derecha a izquierda?

    Si no es así, comprueba que el valor de la propiedad RightToLeft no sea Yes.

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    domingo, 28 de agosto de 2011 15:43
    Moderador
  • jeje me habia olvidado por completo de esa propiedad

    http://social.msdn.microsoft.com/Forums/es/vbes/thread/158b330d-4fee-40dc-b1e6-f6e9533bb1c2

    es mas es la respuesta que di en otra pregunta que le pasaba lo mismo

    como veras no es Win7 o XP el problema sino la cultura que estos definen

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 28 de agosto de 2011 15:44
  • SofJaén, gracias por la respuesta, en el menú que yo pongo a la derecha, configuración estándar de VB Express, donde aparecen las propiedasde de los objetos, en este caso el TextBox, tildo con yes la escritura RightToLeft, de todas formas probaré poniendo la instrucción en el programa tal como ponés a ver si así lo soluciono, pero vuelvo a insitir que haciendo la misma prueba en el XP de una vieja máquina con un Pentium IV, o sea un Form y un TextBox solamente anda bien en ese caso.

    Jorge.

    domingo, 28 de agosto de 2011 15:47
  • "Jorge0001" escribió:

    > Aclero que esto sucede cuando se usa la opción de escribir de
    > derecha a izquierda y usando Windows 7, con XP no sucede y ya
    > Reinstalé/Reparé el VB 2010 Express.

    Hola, Jorge:

    La verdad es que ignoro tal comportamiento, porque nunca he tenido la oportunidad de diseñar una aplicación para permitir que en los controles TextBox se escriba de derecha a izquierda, es decir, establecer el valor RightToLeft.Yes a la propiedad RightToLeft del control TextBox.

    Como dices que eso no sucede en Windows XP, puede ser que se deba al sistema operativo, cosa que lo ignoro por completo. Si estás interesado en ello, y si así lo crees oportuno, sería cuestión que efectuaras tu consulta en el foro en español de Windows 7, por si los usuarios de allí te pueden aclarar la duda:

    http://social.technet.microsoft.com/Forums/es-ES/windows7es/threads/

    Desde luego, no creo que sea un problema de Visual Basic 2010, utilices o no la versión Express, porque me ha dado por realizar una prueba con Visual Studio 2010 Ultimate, y el comportamiento es el mismo que has detallado.

    ¿Ese comportamiento con el carácter decimal no será normal en los idiomas donde se escribe de derecha a izquierda? La verdad es que yo lo desconozco.


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    domingo, 28 de agosto de 2011 15:51
    Moderador
  • Voy a consultar donde me dicen. Las dos máquinas donde probé son mías, pensé en el sistema operativo porque es la única diferencia, yo creo que como todos solemos hacer tengo las dos máquinas configuradas exactamente igual, ya que una es fija y la otra móvil y es cómodo que esté todo en el mismo sitio, además en las dos tengo exactamente los mismo programas, de hecho una es un clon de la otra salvo en que una tiene XP y otra W7.

    Es llamativo el salto de ida y vuelta que pega el punto al usar el RightToLeft, habrá que esperar que la gente de Microsoft lo detecte y lo solucione si es que realemnte es un problema de compatibilidad.

    Muchas gracias por la ayuda.

    Jorge.


    PD: aclaro que estoy usando el RightToLeft porque no me gusta las "rayitas" de formato que pone el MaskedTextBox y tampoco me gusta que cuando se escriben cifras aparezcan de izquierda a derecha ya que no es así como nosotros escribimos habitualmente y le quiero dar a las entradas numéricas la misma forma que tiene la entrada de datos en una calculadora, por ejmplo. Lo peor es que XP funciona perfecto  y en X7 no...........eso me pone loco y no se si es para reír o llorar JAJAJAJAJAJ!!!!!!!!!
    domingo, 28 de agosto de 2011 17:22
  • hola

    no me gusta las "rayitas" de formato que pone el MaskedTextBox

    pero hay propiedades para cambiar esto

    MaskedTextBox.HidePromptOnLeave (Propiedad)

    Es llamativo el salto de ida y vuelta que pega el punto al usar el RightToLeft, habrá que esperar que la gente de Microsoft lo detecte y lo solucione si es que realemnte es un problema de compatibilidad.
    no creo que lo detecte porque no es un error, ni es un problema de compatibilidad, es la cultura que defines en la cp lo que cambia esta propiedad
    Lo peor es que XP funciona perfecto  y en X7 no
    valida lo de la cultura de la pc, esto por supuesto en el panel de control, en la parte de "Region and Language"
    compara ambas pcs y que sean iguales
    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 28 de agosto de 2011 17:37
  • Gracias, no sabía que se podía cambiar la propiedad de presentación de los MaskedTextBox!!!!

     

    Leandro, son "exactamente iguales", por otro lado, me parece que aunque fueran distintas si pones la entrada de un TextBox dependiendo de TextChanged tal cual se pone solo al introducirlo en un Form no tendría porque alterar el orden de entrada o precedencia de los caracteres al introdcucirlos, aunque puedo estar equivocado, mis concocimientos no son muy grandes, pensá que desde la época del Clipper no hacía nada en computación JAJAJAJAJ!!!!!!!!!!

     

    Gracias.

    Jorge.

     

    domingo, 28 de agosto de 2011 17:54
  • "Jorge0001" escribió:

    > PD: aclaro que estoy usando el RightToLeft porque
    > no me gusta las "rayitas" de formato que pone el
    > MaskedTextBox y tampoco me gusta que cuando se
    > escriben cifras aparezcan de izquierda a derecha
    > ya que no es así como nosotros escribimos
    > habitualmente y le quiero dar a las entradas
    > numéricas la misma forma que tiene la entrada de
    > datos en una calculadora, por ejmplo.

    Es decir, que no estás desarrollando una aplicación para un lenguaje árabe (por poner un ejemplo de una cultura donde se escribe de derecha a izquierda), si no que te gusta que los números vayan visualizándose como "aparecen en una calculadora". ¡Pues podías haber empezado "por el PD"! :-)))

    Para lo que deseas conseguir, olvídate de la propiedad RightToLeft y del control MaskedTextBox (que a mí tampoco me gusta), y simplemente establece la "alineación derecha" al control TextBox:

     TextBox1.TextAlign = HorizontalAlignment.Right

    ¡Fíjate que fácil! Ahora te aparecerán los números de derecha a izquierda, y cuando desees escribir una coma o un punto, éste se insertará a continuación del último carácter o número insertado.

    > y tampoco me gusta que cuando se escriben cifras
    > aparezcan de izquierda a derecha ya que no es así
    > como nosotros escribimos habitualmente

    Yo siempre (por no decir habitualmente), las cifras la escribo de izquierda a derecha:

         ------->
         929283938,32

    Las calculadoras si "escriben" de derecha a izquierda:

                  <-------
         929283938,32

       


    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.




    lunes, 29 de agosto de 2011 6:01
    Moderador