MonthCalendar とは
こんな感じのコンポーネントです。
マウスで日付の選択が可能なコンポーネントです。
また、上部の左右三角マークをクリックすると月の変更が行えます。
このコンポーネントを使って、カレンダ入力画面のサンプルを作成します。
こんな感じです。
機能としては
・日付入力(TextBox)を引数で受け取ります。
・日付入力(TextBox)に日付が設定されていれば、初期選択日としてカレンダにセットします。
・日付入力(TextBox)に日付が設定されていなければ、初期選択日は当時となります。
・カレンダから日付をクリックし、選択をクリックすると、日付入力(TextBox)にその日付をセットします。
カレンダ入力画面を呼び出すサンプル画面
日付の直接入力と▼ボタンで日付選択が行える画面です。
カレンダ入力画面を呼び出すだけのサンプル画面です。
※日付の直接入力はチェックなど作り込んでいません。
プログラミング
言語:C#
・フォームにdataGridViewを配置して下さい。
NameプロパティをdataGridView1にして下さい。
・ボタンを配置して下さい。
FormCalendar.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class FormCalendar : Form
{
// 選択日
private string selectDate;
/// <summary>
/// カレンダ画面クラス
/// </summary>
public FormCalendar()
{
InitializeComponent();
}
/// <summary>
/// 選択クリック処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSet_Click(object sender, EventArgs e)
{
// 選択された日付を
selectDate = monthCalendar1.SelectionStart.ToString("yyyy/MM/dd");
// カレンダ画面を閉じる
this.Close();
}
/// <summary>
/// 戻るクリック処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnReturn_Click(object sender, EventArgs e)
{
// カレンダ画面を閉じる
this.Close();
}
/// <summary>
/// 起動時処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormCalendar_Load(object sender, EventArgs e)
{
// 本日の日付マークを非表示にする(見にくい為)
monthCalendar1.ShowTodayCircle = false;
// 日付選択は1日のみとする
monthCalendar1.MaxSelectionCount = 1;
// 日付チェックを行い、カレンダに初期日をセットする
if (selectDate.Length > 0)
{
DateTime d;
if (DateTime.TryParse(selectDate, out d))
{
monthCalendar1.SelectionStart = d;
}
}
}
/// <summary>
/// カレンダ表示処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void inputCalenda(IWin32Window owner, TextBox textBox)
{
// カレンダフォームのインスタンスを作成する
FormCalendar calenda = new FormCalendar();
// 引数の日付をカレンダフォームにセットする
calenda.selectDate = textBox.Text;
// カレンダーフォームを表示する
calenda.ShowDialog(owner);
// 選択された日付をtextBoxにセットする
if (!textBox.Text.Equals(calenda.selectDate))
{
textBox.Text = calenda.selectDate;
}
}
}
}
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 日付選択(開始)クリック処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDateFrom_Click(object sender, EventArgs e)
{
// カレンダ表示処理
FormCalendar.inputCalenda(this, txtDateFrom);
}
/// <summary>
/// 日付選択(終了)処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDateTo_Click(object sender, EventArgs e)
{
// カレンダ表示処理
FormCalendar.inputCalenda(this, txtDateTo);
}
}
}
実行結果
カレンダ入力画面を呼び出すサンプル画面です、左側の▼ボタンをクリックします。
カレンダ画面が表示されます。
11月30日をクリックし、選択ボタンをクリックします。
カレンダ画面が閉じます。
日付入力に11月30日がセットされます。
以上です。