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 -
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:
Buen domingo y gracias de antemano.
Ludwig
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
-
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
-
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 -
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 en1é"&'(-è_çà
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 a12"&'(-è_çà
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 -
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-
-
- 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
-