1

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

我从两个自定义格式为 h:mm tt 的 DateTimePicker 控件开始。我尝试添加(在 ValueChanged 上),使选定的“开始时间”变为“结束时间”最小值的检查,反之亦然,“结束时间”变为“开始时间”最大值(抱歉很难解释,但是谢谢你的耐心!)

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

我想改成全天预设半小时间隔的组合框;然而,会议记录需要比这更灵活......

有什么想法吗?

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

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 事件并恢复选定的值。

丹,谢谢你的帮助:)

4

1 回答 1

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
于 2009-09-18T18:02:02.943 回答