Problemas con dtPicker - VB 6

Publicado por elcalez, Junio 23, 2007, 02:52:42

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

elcalez

Buenas. Les cuento el problema: Tengo un formulario que contiene un dtPicker. Lo que yo quiero es que cuando el usuario ingrese una fecha, lo haga de corrido. Es decir, que si el usuario pulsa "01062006", el dtP asuma la fecha 01/06/2006. Pero lo que hace, es que pulso "06" y se queda seleccionado el día, y para sacarlo de ahí, tengo que pulsar la flecha para el costado para poderlo hacer , lo que resulta algo incómodo a la hora de efectuar la carga.
Probé poniendo una variable pública que se vaya incrementando en el evento keypress. La variable es "pulsa" y les dejo el código del keydown:

Private Sub dtpfecha_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case pulsa
        Case 2
            KeyCode = vbKeyRight
        Case 4
            KeyCode = vbKeyRight
        Case 8
            pulsa = 0
    End Select
End Sub

Lo que sucede, es que si me equivoqué mientras estaba cargando el mes y vuelvo para rectificarlo, hace cualquier cosa.

El otro inconveniente es que cuando termino de cargar el año y pierde el foco, si vuelve a tomar el foco, deja seleccionado el año y quisiera que seleccione el día. Espero que más o menos se entienda lo que quise poner, cualquier cosa aclaro dudas.

Busqué por google como 1 hora y nada, les dejo algo de una persona que se quejaba de lo mismo:

Citar1.- DTPicker.- Ayuda con la validacion y da al usuario la posibilidad de
usar un calendario bien didactico, pero para un usuario acostumbrado a
ingreso por teclado no ayuda en nada. porque hay que usar las flechas del
cursor para cambiar del campo dia al mes y al a¸o. o a usar el mouse. Lo
cual me parece muy limitante para un usuario avanzado que es a donde va mi
aplicacion.

No es que mi aplicación sea para un usuario avanzado (es más, me gustaría cambiar de lenguaje algún día, pero estoy dando mis primeros pasos de a poquito con el VB que más o menos lo conozco y tengo este proyecto con un par de horas encima... aclaro esto para que no hagan comentarios de que vb6 es una cagad@ porque ya me lo dicen en todos lados  :P)

Bueno, de última hago una máscara, pero me dá bronca porque el controlcito está lindo y como cité más arriba, está bueno por el tema de la validación.

Acepto sugerencias sobre que harían o si conocen algún control gratis que pueda descargar y que esté piola para el cometido.

Desde ya, muchas gracias!

hardrocker

Para que retome bien el foco seria asi:

contador = contador + 1
If contador = 3 Then
KeyCode = vbKeyRight
ElseIf contador = 5 Then
KeyCode = vbKeyRight
ElseIf contador = 9 Then

  KeyCode = vbKeyRight
  contador = 1

End If

En lo otro todavia no se me ocurre  ::)
-·=»‡«=·- M€ÐÏØ€VØ-·=»‡«=·-

elcalez

Cita de: hardrocker en Junio 24, 2007, 17:21:31
Para que retome bien el foco seria asi:

contador = contador + 1
If contador = 3 Then
KeyCode = vbKeyRight
ElseIf contador = 5 Then
KeyCode = vbKeyRight
ElseIf contador = 9 Then

  KeyCode = vbKeyRight
  contador = 1

End If

En lo otro todavia no se me ocurre  ::)

Si, pero tengo el mismo problema: si el que lo carga vuelve a cargar el día porque se equivocó, por ejemplo pulsó 28 y quiso poner 18, vuelve a poner el foco en día y el contador ya no estaría en 1. Entonces se dispararía un vbkeyRight en cualquier momento. No se como preguntar en que posición del dtpicker se encuentra, es medio malo este control.
Te pregunto a vos hard que por tus post veo que la tenés muy clara: que control usarías para validar un campo fecha? Estoy haciendo un sistemita en principio para mí y quiero que quede lo más sencillo posible a la hora de cargar muchos registros.
Sino no te hagas drama, que pongo un text con tres barras y voy validando a medida que va ingresando.

Gracias!

hardrocker

#3
Yo haria que, en el caso de que el usuario haya terminado de ingresar los numeros, oprima enter, que equivaldría al numero 13 en Ascii.

'General
Option Explicit
contador = contador + 1

Private Sub DTPicker1_KeyDown(KeyCode As Integer, Shift As Integer)

If contador = 3 Then
KeyCode = vbKeyRight
ElseIf contador = 5 Then
KeyCode = vbKeyRight
End If

If KeyCode = 13 Then
KeyCode = vbKeyRight
contador = 0
End If

End Sub

De esta manera, solo pone el contador en "0" si oprime enter, sino, se puede volver a modificar la fecha anteriormente ingresada.
Y te confieso que se me complica un poco ayudarte en VB 6, ultimamente le estoy dando duro a .NET, como que cambian muchisimas cosas.
Mañana veo si se me ocurre otra solucion.
-·=»‡«=·- M€ÐÏØ€VØ-·=»‡«=·-

elrosti

#4
elcalez: El problema es quizás que el control dtpicker no está pensado para lo que queres hacer, tambien tenes que pensar que es un control "viejo". Creo que la funcionalidad es así y no hay vuelta que darle.

Algo que podes hacer es buscar en internet controles Activex del mismo estilo que se adecúen mas a lo que vos querés hacer.

también como dijiste podes hacer un textbox con una mascara que para mi es la decisión correcta.

Piensa que también puedes hacer una mezcla de las 2, poniendo enfrente el textbox con la mascara y detrás con el mismo tamaño un DTPicker para tener la funcionalidad de elegir la fecha despegando el control con la flechita. Creo que te será sencillo, usando los eventos, determinar la mejor forma de mostrar la fecha seleccionada en el DTPicker en el textbox.

.
Cita de: hardrocker en Junio 25, 2007, 00:16:03
Y te confieso que se me complica un poco ayudarte en VB 6, ultimamente le estoy dando duro a .NET, como que cambian muchisimas cosas.
Mañana veo si se me ocurre otra solucion.

Excelente Hardrocker, .NET es mucho mejor que VB 6, aunque el lenguaje es el mismo, al estar dentro de la plataforma .NET VB se convirtió en un lenguaje en serio (finalmente es 100% orientado a objetos).

Cualquier cosa que necesites o problema que tengas con .NET pegame el chiflido ya que trabaje muchisimo tiempo con esta plataforma.  :up:

Saludos
Yo no lo quería creer..... pero ella me convenció.

elcalez

Cita de: elrosti en Junio 25, 2007, 12:16:08
Piensa que también puedes hacer una mezcla de las 2, poniendo enfrente el textbox con la mascara y detrás con el mismo tamaño un DTPicker para tener la funcionalidad de elegir la fecha despegando el control con la flechita. Creo que te será sencillo, usando los eventos, determinar la mejor forma de mostrar la fecha seleccionada en el DTPicker en el textbox.

Creo que voy a hacer eso. Gracias a los 2 por las respuestas!
Si tengo alguna duda, los jodo de nuevo! Pueden cerrar el tema.

Saludos!!