• Viernes 8 de Noviembre de 2024, 09:32

Autor Tema:  RFC en un text box  (Leído 5674 veces)

jorge_jvm

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: mx
    • Ver Perfil
RFC en un text box
« en: Viernes 24 de Octubre de 2008, 05:47 »
0
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

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: RFC en un text box
« Respuesta #1 en: Domingo 26 de Octubre de 2008, 00:16 »
0
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
  1.  
  2. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  3.         If TextBox1.TextLength = 4 Or TextBox1.TextLength = 11 Then
  4.             TextBox1.Text += "-"
  5.             TextBox1.SelectionStart = TextBox1.TextLength  ' si eliminas esta línea el cursor se irá al inicio...
  6.        End If
  7.     End Sub
  8.  
  9.  
«Ma non troppo»
----> ModoVacaciones = False<----

jorge_jvm

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: mx
    • Ver Perfil
Re: RFC en un text box
« Respuesta #2 en: Domingo 26 de Octubre de 2008, 01:36 »
0
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

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: RFC en un text box
« Respuesta #3 en: Domingo 26 de Octubre de 2008, 02:11 »
0
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

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
  1.  
  2. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  3.         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...
  4.         If TextBox1.TextLength > tam Then
  5.             If TextBox1.TextLength = 4 Or TextBox1.TextLength = 11 Then
  6.                 TextBox1.Text += "-"
  7.                 TextBox1.SelectionStart = TextBox1.TextLength  ' si eliminas esta línea el cursor se irá al inicio...
  8.             End If
  9.         End If
  10.         tam = TextBox1.TextLength
  11.     End Sub
  12.  
  13.  

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
  1.  
  2. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  3.         Static tam As Integer
  4.         Static noChange As Boolean
  5.  
  6.         If noChange = False Then
  7.             If TextBox1.TextLength > tam Then
  8.                 If TextBox1.TextLength - tam = 1 Then ' el texto se introdujo por teclado o sólo se pegó un carácter...
  9.                    If TextBox1.TextLength = 4 Or TextBox1.TextLength = 11 Then
  10.                         tam = TextBox1.TextLength + 1
  11.                        ' aquí podrías poner también el nochange=true  y después de la siguiente línea el =false
  12.                        TextBox1.Text += "-"
  13.                         TextBox1.SelectionStart = TextBox1.TextLength  ' si eliminas esta línea el cursor se irá al inicio...
  14.                    End If
  15.                 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.
  16.                    If TextBox1.TextLength > 3 Then
  17.                         Dim txt As String  ' para valores temporales
  18.  
  19.                         txt = TextBox1.Text.Replace("-", "") ' elimina guiones (por si no existieran en el lugar adecuado)
  20.                        Select Case txt.Length
  21.                             Case 3
  22.                                 txt &= "-"
  23.                             Case 4 To 9
  24.                                 txt = txt.Substring(0, 4) & "-" & txt.Substring(4, txt.Length - 4)
  25.                             Case 10
  26.                                 txt = txt.Substring(0, 4) & "-" & txt.Substring(4, 6) & "-"
  27.                             Case Is > 10
  28.                                 txt = txt.Substring(0, 4) & "-" & txt.Substring(4, 6) & "-" & txt.Substring(10, txt.Length - 10)
  29.                         End Select
  30.                         noChange = True
  31.                         TextBox1.Text = txt
  32.    TextBox1.SelectionStart = TextBox1.TextLength  ' olvidé meter esta línea.... para que el cursor se vaya al final de la edición.
  33.                        noChange = False
  34.                     End If
  35.                 End If
  36.             End If
  37.             tam = TextBox1.TextLength
  38.         End If
  39.     End Sub
  40.  
  41.  
p.d: olvidé añadir la línea que manda el cursor al final del texto al pegar un texto directamente en el textbox...
« última modificación: Domingo 26 de Octubre de 2008, 02:41 por Nebire »
«Ma non troppo»
----> ModoVacaciones = False<----

jorge_jvm

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: mx
    • Ver Perfil
Re: RFC en un text box
« Respuesta #4 en: Domingo 26 de Octubre de 2008, 02:32 »
0
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

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: RFC en un text box
« Respuesta #5 en: Domingo 26 de Octubre de 2008, 02:14 »
0
Cita de: "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:
saludos

Jorge Castellanos
DGAM

Esto, no había terminado de editar el código y se me escapo el 'enter',  y ya has respondido ahora que lo he vuelto a editar... vuelve a repasar el último fragmento del código...que es donde tenía que añadir...
«Ma non troppo»
----> ModoVacaciones = False<----

jorge_jvm

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: mx
    • Ver Perfil
Re: RFC en un text box
« Respuesta #6 en: Domingo 26 de Octubre de 2008, 09:02 »
0
De nuevo, Mil gracias por tu tiempo y paciencia Nebire, un saludo  :lol:

Jorge Castellanos
DGAM

 :comp:   :hola: