CLR: .Net / Mono / Boo / Otros CLR > VB .NET
RFC en un text box
jorge_jvm:
Hola soy nuevo en el foro y pues queria saber si alguen tiene alguna idea.. les cuento..
tengo un textbox al que le quiero ingresar un rfc de un cliente, por ejemplo CAVJ870809LM2, pero quiero que en el text box mientras se escrive, se ponga automaticamente un separador, osea.. cuando escria los primeros 4 caracteres automaticamente el 5 sea "-", osea CAVJ-, despues de los siguientes 6 ponga otro "-", de tal manera que el resultado sea CAVJ-870809-LM2 en el mismo textbox.
alguien tiene alguna idea? o algo que se paresca?' manejo VB.NET 2008
gracias de antemano
Jorge Castellanos
DGAM
Nebire:
Programa el evento change, si hay x letras al texto actual añade al final del mismo el carácter deseado, x letras sería por ejemplo: 4 y 11..., tal que así:
--- Código: Visual Basic --- Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If TextBox1.TextLength = 4 Or TextBox1.TextLength = 11 Then TextBox1.Text += "-" TextBox1.SelectionStart = TextBox1.TextLength ' si eliminas esta línea el cursor se irá al inicio... End If End Sub
jorge_jvm:
Gracias Nebire, funcina a la perfeccion, pero pasa algo curioso si intento borrar una parte o todo el textbox, no me deja eliminar... que podra ser?
saludos
Nebire:
--- Cita de: "jorge_jvm" ---Gracias Nebire, funcina a la perfeccion, pero pasa algo curioso si intento borrar una parte o todo el textbox, no me deja eliminar... que podra ser?
saludos
--- Fin de la cita ---
cierto... esperaba hacerte pensar... pero bueno.. te explico. Dado que el código está en el evento change, cuando añadimos el carácter "-" el texto ha cambiado por tanto el evento se vuelve a disparar (por eso necesitamos aquello de selectionstart). Del mismo modo al borrar un carácter (pongamos que tenemos 12 caracteres) lo que sucede es que ahora son 11, el código del evento le dice que cuando haya 11 caracteres añada un guión y eso es lo que hace.
En el código siguiente lo que hacemos es filtrar, ahora sólo se ejecuta el código de comprobar y si es preciso añadir el guión cuando haya un carácter más que la vez anterior, es decir que si elimino un carácter el código no se ejecuta, o dicho de otro manera, sólo se ejecuta el código cuando añadamos caracteres y no cuando 'eliminemos caracteres...
--- Código: Visual Basic --- Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Static tam As Integer ' necesitamos 'memorizar' entre eventos el tamaño del texto para comprobar si la variación consiste en añadir o quitar... If TextBox1.TextLength > tam Then If TextBox1.TextLength = 4 Or TextBox1.TextLength = 11 Then TextBox1.Text += "-" TextBox1.SelectionStart = TextBox1.TextLength ' si eliminas esta línea el cursor se irá al inicio... End If End If tam = TextBox1.TextLength End Sub
Aún hay otro problema... qué pasa si el usuario en vez de teclear pega un código ???... bueno eso se resuelve con el siguiente código... si no lo entiendes pregunta de nuevo ...
--- Código: Visual Basic --- Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Static tam As Integer Static noChange As Boolean If noChange = False Then If TextBox1.TextLength > tam Then If TextBox1.TextLength - tam = 1 Then ' el texto se introdujo por teclado o sólo se pegó un carácter... If TextBox1.TextLength = 4 Or TextBox1.TextLength = 11 Then tam = TextBox1.TextLength + 1 ' aquí podrías poner también el nochange=true y después de la siguiente línea el =false TextBox1.Text += "-" TextBox1.SelectionStart = TextBox1.TextLength ' si eliminas esta línea el cursor se irá al inicio... End If Else ' se ha pegado texto.. ya que el teclado dispara el evento carácter a carácter...y se han añadido más de 1 de golpe. If TextBox1.TextLength > 3 Then Dim txt As String ' para valores temporales txt = TextBox1.Text.Replace("-", "") ' elimina guiones (por si no existieran en el lugar adecuado) Select Case txt.Length Case 3 txt &= "-" Case 4 To 9 txt = txt.Substring(0, 4) & "-" & txt.Substring(4, txt.Length - 4) Case 10 txt = txt.Substring(0, 4) & "-" & txt.Substring(4, 6) & "-" Case Is > 10 txt = txt.Substring(0, 4) & "-" & txt.Substring(4, 6) & "-" & txt.Substring(10, txt.Length - 10) End Select noChange = True TextBox1.Text = txt TextBox1.SelectionStart = TextBox1.TextLength ' olvidé meter esta línea.... para que el cursor se vaya al final de la edición. noChange = False End If End If End If tam = TextBox1.TextLength End If End Sub p.d: olvidé añadir la línea que manda el cursor al final del texto al pegar un texto directamente en el textbox...
jorge_jvm:
WOW Nebire simplemente Genial, gracias, el codigo esta bastante entendible, aunque hay partes que nunca escuche antes hasta hoy, pero me esta jalando bien, solo que al poner el segundo "-" me repite el caracter anterior, osea:
asi deveria ser
SAPA-840404-
pero me lo pone asi
SAPA-840404-4
pero mil gracias por tu ayuda
saludos
Jorge Castellanos
DGAM
Navegación
[#] Página Siguiente
Ir a la versión completa