2009-09-18 206 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