我正在寻找一种使用两个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事件并恢复所选值。
丹,谢谢你的帮助:)。
答案 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