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

Resuelto
Louloude74 Mensajes publicados 62 Estado Miembro -  
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   -
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. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Embajador 1 588
     
    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
  2. Usuario anónimo
     
    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
  3. Usuario anónimo
     
    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
  4. Louloude74 Mensajes publicados 62 Estado Miembro 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. Usuario anónimo
       
      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. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Has añadido las 8 líneas que faltan para los reemplazos del 2 al 8?
      0
      1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         
        esto 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