CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 RFC en un text box

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa