Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: mlutt en 15 Noviembre 2005, 10:10 am



Título: Como poner un textbox con formato de solo fecha y dNI
Publicado por: mlutt en 15 Noviembre 2005, 10:10 am
Quiero que en un textbox, solo me deje poner fechas, como 15/11/05.
Y ya que estamos , preguntar si aki hay algun modo de ponerle mascara de entrada, por ejemplo para el dni, qeu solo me deje poner los numeros y una letra. (como se hace?))
gracias!!!


Título: Re: Como poner un textbox con formato de solo fecha y dNI
Publicado por: soplo en 15 Noviembre 2005, 12:07 pm
Hola
Pondré como ejemplo algunas máscaras corrientes de entrada

Admitir solo números
Código:
sub text1_keypress(keyascii as integer)
if keyascii = 13 then 'caso enter
exit sub
endif
if keyascii=8 (caso backspace)
exit sub
endif

if not isnumeric(chr(keyascii)) then
 keyascii=0 'anular tecla
endif
end sub

caso aceptar solo mayúsculas
Código:
sub text1_keypress(keyascii as integer)
if keyascii = 13 then 'caso enter
exit sub
endif
if keyascii=8 (caso backspace)
exit sub
endif

keyascii=asc(ucase(chr(keyascii))) 'pasar a mayúscula
if keyascii<asc("A") or keyascii>asc("Z") then
 keyascii=0 'anular tecla
endif
end sub

admitir fechas (formato DD/MM/AA)
Código:
sub text1_keypress(keyascii as integer)
if keyascii = 13 then 'caso enter
exit sub
endif
if keyascii=8 (caso backspace)
exit sub
endif

if at(chr(keyascii),"/0123456789")=0  then 'si no está entre estos caracteres
 keyascii=0
endif
end sub
Este caso garantiza que no se escriban caracteres que no sean números o /, pero no garantiza que sea una fecha válida.
Para ello
Código:
sub text1_lostfocus()
if not isdate(text1) then
beep
text1.setfocus
endif
end sub

Admitir un dni (formato 99999999-L)
Código:
sub keypress(keyascii as integer)
if keyascii = 13 then 'caso enter
exit sub
endif
if keyascii=8 (caso backspace)
exit sub
endif

keyascii=asc(ucase(chr(keyascii))) 'pasar a mayúsculas
if at(chr(keyascii),"-0123456789")=0 then
 keyascii=0
endif
end sub
Así se controlan las teclas válidas. Para saber si es un dni válido hace falta el evento lostfocus
Código:
sub text1_lostfocus
if len(text1)<>10 then 'si la longitud es distinta de 10
beep
text1.setfocus
endif
if not isnumeric(left(text1,8)) then 'saber si las 8 primeras posiciones son numéricas
beep
text1.setfocus
endif
if mid(text1,9,1)<>"-" then 'saber si el guión está en su sitio
beep
text1.setfocus
endif
letra$=asc(right(text1,1)) 'en letra queda la letra final
if letra$<asc("A") or letra$>asc("Z") then
beep
text1.setfocus
endif
end sub

Un saludo


Título: Re: Como poner un textbox con formato de solo fecha y dNI
Publicado por: morkcop en 10 Julio 2012, 20:19 pm
Esta solucion es solo cuando ya terminaste de escribir el dni 00000000 y luego presionas un boton
 y al boton le pones esto.

Private Sub Command1_Click()
Text1.Text = FormatNumber(Text1, 0)
End Sub

es muchisimo mas sencillo.

si lo pones en el evento change, no escribira el numero correcto.


Título: Re: Como poner un textbox con formato de solo fecha y dNI
Publicado por: morkcop en 10 Julio 2012, 20:25 pm
A lo mejor queres que vaya tomando forma a un dni mientras lo vas escribiendo, entonces es esto:

Private Sub Text1_Change()
Text1 = FormatNumber(Text1, 0)
Text1.SelStart = Len(Text1.Text)
End Sub