C#

C# 日付を選択する(MonthCalendar)

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になります。

 

タイトルとURLをコピーしました