選択日とフォーカス枠のスタイル設定については、「スタイルの設定」を参照してください。
選択モードの指定
カレンダーコントロールには、日付の選択方法として、1つの日付だけを選択する単一選択と、複数の日付を選択する複数選択の2種類があります。
これらの選択方法は、SelectionModeプロパティで指定します。また、下記に示した選択可能な日付の種類は、AllowSelectionプロパティで設定します。
- 任意の日付 (AllowSellection.AnyDay)
- 営業日 (AllowSellection.Workday)
- 休日と休業日 (AllowSellection.Holiday)
SelectedDate プロパティをデータベースに接続する場合は、必ず単一選択モードに設定してください。複数選択モードではデータベース接続をサポートしていません。 |
日付の選択
マウス・キーボードによる日付の選択
日付選択の操作は、目的の日付をマウスでクリックするか、または矢印キーでフォーカス枠を移動し、[Space]または[Enter]キーを押して行います。また、SelectionModeプロパティを"MultiRich"に設定した場合は、Outlookカレンダーと同等の日付選択機能が有効になり、CtrlキーやShiftキーを使った日付選択ができます。なお、複数選択の場合は、選択できる最大日数を MaxSelectionCountプロパティで設定できます。
コードによる日付の選択
日付はコードで選択することも可能です。この場合、Selectionsプロパティが参照するSelectionCollectionコレクションの次のメソッドのいずれかを使用します。なお、リファレンスのAddメソッドでは、カレント日を含む月のすべての日付を選択する方法を紹介しています。また、選択した日付を解除するときは、次のいずれかのメソッドを使用します。
日付選択時のイベント
カレンダー上の日付が選択された際には下記のようなイベントが発生します。
イベント | 解説 |
---|---|
ClickDate | カレンダー上の日付をクリックしたときに発生します。 |
DoubleClickDate | カレンダー上の日付をダブルクリックしたときに発生します。 |
SelectedDateChanged | クリックやダブルクリック、コードからの設定によって直前に選択されていた日付とは異なる日付が選択されたときに発生します。 |
FocusDateChanged | フォーカス枠を移動したとき発生します。 |
なお、カレンダー上の日付をクリックして日付を選択したときには、次の順序でイベントが発生します。
- FocusDateChanged
- ClickDate
- SelectedDateChanged
- Click
日付の取得
選択された日付の取得
選択された日付は、選択モードの違いによって2つのプロパティを使い分けて取得します。SelectedDateプロパティは、単一選択された日付の取得に使用し、Selectionsプロパティは、複数選択された日付の取得に使用します。複数選択された日付は、Selectionsプロパティが参照するSelectionCollectionコレクションに格納されます。コレクションの要素である日付にアクセスするには、SelectionCollectionコレクションのItemプロパティまたはインデクサを使用します。
クリックイベントによる日付の取得
カレンダー上の日付をクリック、もしくはダブルクリックした際に発生するClickDateイベントやDoubleClickDateイベントの引数からクリック操作によって選択された日付の取得が可能です。各イベントのClickDateEventArgs引数にあるDateプロパティから日付を参照することができます。座標による日付の取得
MouseMoveイベント内で取得したカレンダー上の座標から、日付を取得することが可能です。この場合は、DateFromPointメソッドを使用します。また、その曜日もDayOfWeekFromPointメソッドで取得できます。表示されている日付の取得
GetDatesInViewメソッドは、現在表示されているカレンダーのすべての日付を取得するときに使用します。また取得する日付の種類は、PickDays引数で指定可能です。フォーカスを持つ日付の取得
フォーカスを持っている日付は、FocusDateプロパティで取得および設定が可能です。なお、フォーカスを持っている日付が移動したときには、FocusDateChangedイベントが発生します。 サンプルコード
次のサンプルコードは、複数選択モードで選択された日付をリストボックスに表示する方法を示します。
Imports GrapeCity.Win.Calendar Private Sub GcCalendar1_SelectedDateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GcCalendar1.SelectedDateChanged ' リストボックスをクリアします。 ListBox1.Items.Clear() ' 選択された日付をリストボックスに表示します。 Dim aSC As SelectionCollection = GcCalendar1.Selections If aSC.Count > 0 Then Dim aDay As DateTime For Each aDay In aSC ListBox1.Items.Add(aDay.ToLongDateString()) Next End If End Sub
using GrapeCity.Win.Calendar; private void gcCalendar1_SelectedDateChanged(object sender, System.EventArgs e) { // リストボックスをクリアします。 listBox1.Items.Clear(); // 選択された日付をリストボックスに表示します。 SelectionCollection aSC = gcCalendar1.Selections; if (aSC.Count > 0) { foreach (DateTime aDay in aSC) { listBox1.Items.Add(aDay.ToLongDateString()); } } }