Visual Studioの標準フォームデザイナで「日付」を入力するコントロールは、DateTimePickerとMonthCalendar(どちらもSystem.Windows.Forms名前空間)という2つのコントロールがあります。
今回はこのうちのMonthCalenderの基本を紹介します。
MonthCalendarとは
MonthCalendarは、MSDNでは、「ユーザーがビジュアルな月間予定表を使用して日付を選択できる Windows コントロールを表します。」となっています。
画面に表示されるのは、”カレンダー”で、日付を選択することができるコントロールです。
「日付を選択する」といっても、1日だけ選択することもできますが、「日付の範囲」を選択できます。
とりあえず動かす
Windowsフォームアプリケーションのプロジェクトを作成して、フォームにMonthCalendarコントロールを1つ配置します。
まずは、これだけでビルド・起動をしてみましょう。
カレンダー(MonthCalendar)で現在選択されている日付からドラッグすると、一週間前、一週間後までは選択できるのですが、そこから先は選択できません。
ですが、これはMaxSelectionCountプロパティの初期値が’7’で、7日間しか選択できない設定になっているからです。
MaxSelectionCountプロパティを変更すると、選択できる日付の範囲を変更することができます。
DateChangedイベントとDateSelectedイベント
このMonthCalendarには、DateChangedイベントとDateSelectedイベントという2つのイベントがあります。
この2つのイベントの違いは、
DateChangedイベント | 選択した日付が変更した時に発生するイベント |
DateSelectedイベント | 選択した日付の範囲が選択された時に発生するイベント |
です。・・・といっても、ピンとこないと思います。
コントロールの動作でいうと、下記のようなイメージです。
DateChangedイベント | MouseDownイベントと同じような動作 |
DateSelectedイベント | MouseUpイベントと同じような動作 |
フォームに追加したMonthCalendarコントロールの名前がmonthCalendar1として、下記のサンプルでイベント、イベントハンドラを追加してビルド・実行してみてください。
public frmMain() { InitializeComponent(); } private void frmMain_Load(object sender, EventArgs e) { // monthCalendar1.DateChanged += new DateRangeEventHandler(monthCalendar1_DateChanged); monthCalendar1.DateSelected += new DateRangeEventHandler(monthCalendar1_DateSelected); } private void btnExit_Click(object sender, EventArgs e) { // this.Close(); } private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) { // DateTime start = e.Start; DateTime end = e.End; Console.WriteLine("Changed: " + start.ToString() + " " + end.ToString()); } private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e) { // DateTime start = e.Start; DateTime end = e.End; Console.WriteLine("Selected: " + start.ToString() + " " + end.ToString()); }
この2つのイベントの第二引数は、同じDateRangeEventArgsクラスというクラスです。
選択された日付は、このDateRangeEventArgsのStartプロパティ(開始日)、Endプロパティ(終了日)からDateTime型で取得できます。
この時のStartプロパティ、Endプロパティの時刻は、Startプロパティが0:00:00、Endプロパティが23:59:59になります。