Pregunta

Estoy buscando una manera de usar dos controles DateTimePicker para seleccionar un rango de horas y minutos en un día. Es decir, para seleccionar básicamente un "tiempo de inicio" y un "tiempo de finalización".

Comencé con dos controles DateTimePicker con el formato personalizado de h: mm tt. Intenté agregar (en ValueChanged), una verificación que hizo que el "tiempo de inicio" seleccionado se convierta en el mínimo de "tiempos de finalización" y viceversa, el "tiempo de finalización" se convierta en el máximo de "tiempos de inicio" (lo siento, es difícil de explicar, pero gracias por tu paciencia!)

Sin embargo, ese enfoque no parecía funcionar: todavía podía seleccionar las 11.00 AM en la 'hora de finalización' y la 1.00 PM en la 'hora de inicio'. Tengo la sensación de que el día actual de la marca de tiempo tiene algo que ver con esto (por ejemplo, la hora de inicio es el día anterior y, por lo tanto, es menor).

Pensé en cambiar a un cuadro combinado de intervalos predeterminados de media hora a lo largo del día; sin embargo, los minutos deben ser más flexibles que eso ...

¿Alguna idea?

ACTUALIZACIÓN:
El comentario de Dan a continuación respondió a este problema ... Este es el código con el que terminé como referencia;

Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged

    DateTimePicker2.MinDate = Date.Today + DateTimePicker1.Value.TimeOfDay

End Sub

Private Sub DateTimePicker2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker2.ValueChanged

    DateTimePicker1.MaxDate = Date.Today + DateTimePicker2.Value.TimeOfDay

End Sub

DateTimePIcker1 es el límite inferior, DateTImePIcker2 es el límite superior, ambos usan " h: mm tt " como un formato de fecha y hora personalizado.

El almacenamiento de estas preferencias ahora solo usará Value.TimeOfDay (y se almacenará como un intervalo de tiempo), luego, al recuperarlo, se produce el siguiente proceso de carga;

DateTimePicker1.Value = Date.Today + StoredTimeLowerBound
DateTimePicker2.Value = Date.Today + StoredTimeUpperBound

Esto llamará automáticamente a los eventos ValueChanged manejados anteriormente y restaurará los valores seleccionados.

Dan, gracias por tu ayuda :)

¿Fue útil?

Solución

Esto asegurará que sus dos tiempos sean de hoy:

Dim startTime As Date = Date.Today + DateTimePicker1.Value.TimeOfDay
Dim endTime As Date = Date.Today + DateTimePicker2.Value.TimeOfDay

Entonces puedes escribir If endTime < startTime Then endTime = startTime o lo que quieras.

Por último, simplemente vuelva a colocar los valores de Fecha modificados en los controles DateTimePicker:

DateTimePicker1.Value = startTime
DateTimePicker2.Value = endTime

EDITAR : para un rango de horas, desea un objeto TimeSpan, que es automáticamente el resultado de la suma / resta de DateTime objetos:

Dim range As TimeSpan = endTime - startTime
Dim numHours As Double = range.TotalHours
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top