から派生したクラスがありますDateTimePicker
。ピッカー コントロールには、日付を format で表示するために、 format が に設定されDateTimePickerFormat.Custom
、カスタム フォーマット文字列が に設定されています。ここでは、ユーザーがマウス カーソルまたはキーを使用してタブでクリックしたときに強調表示される年のサブフィールドです。強調表示されると、ユーザーは/キーを使用して年を増減したり、新しい年の値を手動で入力したりできます。月、日、時、分のサブフィールドについても同様です。yyyy.MM.dd HH:mm
2013.01.25 21:45
2013
TAB
UP
DOWN
私のアプリケーションでは、特定の日付または時刻の値が禁止されています。たとえば、次のルールを考えてみましょう。
- 予定は、最も近い 10 分に丸められた時間にのみスケジュールできます。たとえば、21:13 ではなく、21:10 または 21:20 にスケジュールできます。
このためには、現在どのサブフィールドにフォーカスがあるかを知る必要があります。問題は、これを決定する方法がわからないことです。どのサブフィールドにフォーカスがあるかがわかれば、次の一連のルールをコードで考案できます。
- 分サブフィールドが選択されている場合、ユーザーが
UP
キーを押すと、時間が 10 分ずつ増加します。 - 分サブフィールドが選択されている場合、ユーザーが
DOWN
キーを押すと、時間が 10 分減ります。 - 分サブフィールドがフォーカスを失った場合は、分を最も近い 10 分に切り上げまたは切り捨てます。
残っている唯一の問題..どのサブフィールドが現在フォーカスされているかを見つけるにはどうすればよいですか?
注: はい、イベントで検証チェックを行うことができますOnLeave
が、私のアプリケーションでは、無効な日時値を完全にスキップする必要があります。また、ここに記載されている解決策も確認しました。しかし、私はアクティブなサブフィールドも演習として見つけたいと思っています。最後に、役に立つとすれば、私は Windows 7 x86 で C# 4.0 を使用しています。