Reemplazar & por 1 al ingresar en el cuadro de texto.

Resuelto
Bonjour,

No sé ustedes, pero a mí me pasa a menudo que, como no tengo teclado numérico, ingreso números de esta manera &é" en lugar de 123.
Para evitar esto, me gustaría encontrar cómo, a medida que voy escribiendo, reemplazar los caracteres &é"'(-è_çà por 1234567890; y de paso forzar las mayúsculas.

Para las mayúsculas utilizo:
 Private Sub TextBox1_Change() Me.TextBox1.Text = UCase(Me.TextBox1.Text) End Sub 


Buen domingo y gracias de antemano.

Ludwig

4 respuestas

  1. Colaborador
    Hola,
    quizás:
    Private Sub TextBox1_Change() Me.TextBox1.Text = UCase(Me.TextBox1.Text) Me.TextBox1.Text = replace(Me.TextBox1.Text,"&","1") ' ... Me.TextBox1.Text = replace(Me.TextBox1.Text,"à","0") End Sub
    0
    1. Hola

      si trabajas en VB.Net, hay algo más optimizado (en tiempo de ejecución)

      Hay que derivar el textbox y reescribir el método ProcessCmdKey
      Aquí hay un ejemplo en C# (el lenguaje base de .Net, VB.Net es "solo" una piel de VB)
      https://codes-sources.commentcamarche.net/forum/affich-1526742-keydown-keypress#5

      Y algo para pasar de C# a VB.Net
      https://lite.qwant.com/?q=c%23+to+vb&client=opensearch
      --
      Cuando era pequeño, el Mar Muerto solo estaba enfermo.
      George Burns
      0
      1. No he explicado por qué no es óptimo realizar Replaces en el evento Change (y esto es válido independientemente del VB utilizado, pero solo en .Net tengo una buena solución)

        Supongamos que tu textBox contiene AZERTYUIOP y acabas de escribir à.

        Aplicaremos los 10 Replace uno tras otro.
        Cada Replace va a examinar cada carácter para ver si es el que debe reemplazar:
        • AZERTYUIOPà para encontrar &,
        • AZERTYUIOPà para encontrar é
        • etc... sin hacer nada hasta
        • AZERTYUIOPà para encontrar à, y allí encuentra à que reemplaza por 0, el textBox se convierte en AZERTYUIOP0


        Entonces, el evento Changed se desencadena nuevamente y comenzamos a examinar AZERTYUIOP0 10 veces para nada.

        Al final, se ejecutan 220 Replaces y solo uno da resultado.

        Evidentemente, esto se hace en un abrir y cerrar de ojos, pero como soy un poco retorcido, voy a copiar y pegar
        &é"&'(-è_çà
        en mi textBox
        Hay un cambio, por lo que
        &é"&'(-è_çà
        se convierte en
        1é"&'(-è_çà
        que lanzará un nuevo evento change, uno de ellos "Change" en ejecución (no sé cuál tendrá prioridad sobre el otro...) volverá a cambiar el texto a
        12"&'(-è_çà
        que provocará una tercera ejecución del evento, etc...

        A simple vista, 10 eventos Changed que harán cada uno 10 Replaces, con la esperanza de que todas las ejecuciones en paralelo no entren en conflicto.

        Ahí empezará a notarse, y no te digo si tocas una tecla en medio....

        --
        Cuando era pequeño, el mar Muerto solo estaba enfermo.
        George Burns
        0
        1. Hola y gracias por tus respuestas,

          He probado la primera solución, la que usa replace().
          Es rápida pero no funciona para las teclas é, è, ç y à.

          He ido a ver tu enlace y he hecho una conversión, pero hay líneas de código en rojo.

          Es una pena que no exista una función como ucase().
          Seguiré buscando.

          Gracias de nuevo por tus respuestas y que tengas un buen domingo.

          Ludwig
          0
          1. Fui a ver tu enlace y hice una conversión, pero hay líneas de código en rojo.

            ¿Código en VB.Net o no?
            Si es otro VB, seguro que no funcionará....

            Si es realmente VB.Net, ¿has derivado el textbox?
            ¿Qué líneas están en rojo?
            0
          2. Colaborador
            ¿Has añadido las 8 líneas que faltan para los reemplazos del 2 al 8?
            0
          3. Colaborador
            @yg_beesto será un poco más rápido. me parece bastante poco importante, el ordenador trabaja solo un poquito con cada carácter ingresado:
            Private Sub TextBox1_Change() dim t as string static aa as boolean if not aa then aa = true t=Me.TextBox1.Text t = UCase(t) t = replace(t,"&","1") ' ... agregar las 8 líneas de 2 a 8 t = replace(t,"à","0") it t <> Me.TextBox1.Text then Me.TextBox1.Text = t end if aa = false end if End Sub
            0