【问题标题】:DateTimePicker: Selecting a range of hours within a single day onlyDateTimePicker:仅选择一天内的小时范围
【发布时间】:2012-05-05 13:05:17
【问题描述】:

我正在寻找一种方法来使用两个 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 事件并恢复选定的值。

丹,谢谢你的帮助:)

【问题讨论】:

  • 发布您正在使用的 ValueChanged 逻辑可能会有所帮助。
  • 当然,当我有机会回到我的代码时会这样做:)

标签: vb.net datetime datetimepicker


【解决方案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 或任何你想要的。

最后,只需将修改后的日期值放回 DateTimePicker 控件:

DateTimePicker1.Value = startTime
DateTimePicker2.Value = endTime

编辑:在几个小时内,您需要一个TimeSpan 对象,它自动是DateTime 对象加/减的结果:

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

【讨论】:

  • 感谢您的回复。我并不担心这些值是从哪一天开始的,只是想知道为什么我想要的东西不太奏效。我想我可以改写为我需要使用 DateTimePickers 中的开始和结束时间(如 h:MM tt)和验证逻辑来​​选择一个小时范围。
  • @Shadow:查看我的编辑。这就是你的意思吗?甚至没有接近?
  • 我再次访问了我的代码并测试了您提供的第一条语句——它们的工作原理非常棒! Value.TimeOfDay 确实帮助了很多事情:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
相关资源
最近更新 更多