DateTimePicker: выбор диапазона часов только в течение одного дня - PullRequest
1 голос
/ 18 сентября 2009

Я ищу способ использования двух элементов управления DateTimePicker для выбора диапазона часов и минут в течение одного дня. То есть, чтобы выбрать «время начала» и «время окончания».

Я начал с двух элементов управления DateTimePicker с пользовательским форматом h: mm tt. Я попытался добавить (в ValueChanged), что проверка, согласно которой выбранное «время начала» станет минимумом «времени окончания», и наоборот, «время окончания» станет максимумом «времени начала» (извините, это сложно объяснить, но спасибо за терпение!)

Однако этот подход, похоже, не сработал - я все еще мог выбрать 11:00 утра в «время окончания» и 13:00 вечера в «время начала». У меня такое ощущение, что текущий день метки времени как-то связан с ней (например, время начала предыдущего дня и, следовательно, меньше).

Я думал о переходе в комбинированное окно с предварительно установленными получасовыми интервалами в течение дня; однако минуты должны быть более гибкими, чем это ...

Есть мысли?

UPDATE:
Комментарий Дэна, приведенный ниже, ответил на эту проблему ... Это код, который я использовал для справки;

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 - нижняя граница, DateTImePIcker2 - верхняя граница, оба используют «h: mm tt» в качестве пользовательского формата даты и времени.

Для хранения этих предпочтений теперь будет просто использоваться Value.TimeOfDay (и сохраняться как промежуток времени), затем при извлечении происходит следующий процесс загрузки;

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

Это автоматически вызовет события ValueChanged, обработанные выше, и восстановит выбранные значения.

Дэн, спасибо за помощь:)

1 Ответ

1 голос
/ 18 сентября 2009

Это гарантирует, что оба ваших времени с сегодняшнего дня:

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

Тогда вы можете написать If endTime < startTime Then endTime = startTime или что угодно.

Наконец, просто поместите измененные значения Date обратно в элементы управления DateTimePicker:

DateTimePicker1.Value = startTime
DateTimePicker2.Value = endTime

РЕДАКТИРОВАТЬ : Для диапазона часов вы хотите объект TimeSpan, который автоматически является результатом сложения / вычитания DateTime объектов:

Dim range As TimeSpan = endTime - startTime
Dim numHours As Double = range.TotalHours
...