DateTimePicker:仅在一天内选择一个小时范围

时间:2009-09-18 17:32:47

标签: vb.net datetime datetimepicker

我正在寻找一种使用两个DateTimePicker控件在一天内选择小时和分钟范围的方法。也就是说,基本上选择“开始时间”和“结束时间”。

我开始使用两个DateTimePicker控件,其自定义格式为h:mm tt。我尝试添加(在ValueChanged上),一个检查,使选定的'开始时间'将成为'结束时间'最小值,反之亦然,'结束时间'成为'开始时间'最大值(对不起,很难解释,但谢谢你的耐心!)

然而,这种方法似乎不起作用 - 我仍然可以选择'结束时间'上午11点和'开始时间'下午1点。我感觉时间戳的当前日期与它有关(例如,开始时间是前一天,因此较少)。

我考虑过全天改为预设半小时间隔的组合框;但是分钟需要比那更灵活......

有什么想法吗?

更新
下面Dan的评论回答了这个问题......这是我最终提供的代码供参考;

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 个答案:

答案 0 :(得分:1)

这将确保您的两个时间都来自今天:

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