1

2 つの DateTimePicker コントロールを使用して、1 日のうちの時間と分の範囲を選択する方法を探しています。つまり、基本的に「開始時間」と「終了時間」を選択することです。

h:mm tt のカスタム形式の 2 つの DateTimePicker コントロールから始めました。(ValueChanged で) 追加しようとしましたが、選択した「開始時間」が「終了時間」の最小値になり、逆に「終了時間」が「開始時間」の最大値になるチェックを追加してみました (説明が難しくて申し訳ありませんが、お待ち頂きまして、ありがとうございます!)

しかし、そのアプローチはうまくいかなかったようです。「終了時間」で午前 11 時、「開始時間」で午後 1 時を選択できました。タイムスタンプの現在の日付が関係しているように感じます (たとえば、開始時刻が前日であるため、それよりも小さい)。

1 日を通して 30 分間隔で事前設定されたコンボ ボックスに変更することを考えました。ただし、議事録はそれよりも柔軟である必要があります...

何かご意見は?

更新:
以下のダンのコメントは、この問題に答えました...これは、参照用に最終的に作成されたコードです。

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

EDIT :オブジェクトが必要な時間の範囲で、TimeSpanオブジェクトの加算/減算の結果が自動的に生成されDateTimeます:

Dim range As TimeSpan = endTime - startTime
Dim numHours As Double = range.TotalHours
于 2009-09-18T18:02:02.943 に答える