2009-09-18 207 views
1

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

我开始使用两个DateTimePicker控件,自定义格式为h:mm tt。我尝试添加(在ValueChanged上),一个支票使选定的'开始时间'成为'结束时间'的最小值,反之亦然,'结束时间'成为'开始时间'的最大值(抱歉,很难解释,但感谢您的耐心等待!)

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

我曾考虑换一个全天预设半小时间隔的组合框;然而分钟需要比那更灵活...

有什么想法?

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:毫米TT”作为自定义日期时间格式。

存储这些首选项现在只需使用Value.TimeOfDay(并将其存储为时间跨度),然后在检索时发生以下加载过程;

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

这将自动调用上面处理的ValueChanged事件并恢复选定的值。

丹,感谢您的帮助:)

+0

发布您正在使用的ValueChanged逻辑可能会有帮助。 – 2009-09-18 17:39:15

+0

当然,当我有机会回到我的代码:) – 2009-09-18 18:06:53

回答

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 objects:

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

感谢您的回复。我并不担心这些价值来自哪一天,而只是一种想法,为什么我想要的东西不起作用。 我想我可以再说一遍,我需要使用开始和结束时间(如h:MM tt)在带有验证逻辑的DateTimePickers中选择一个小时范围。 – 2009-09-18 18:06:12

+0

@Shadow:查看我的编辑。这是你在做什么?差远了? – 2009-09-18 18:20:10

+0

我再次访问了我的代码,并测试了您提供的第一条语句 - 它们像魅力一样工作! Value.TimeOfDay真的帮助了一切:)。 – 2009-09-19 03:53:34