C# 日付入力をカレンダから選択する(MonthCalendar)

C# サンプルコード プログラミング

概要説明

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 initDate;
                if (DateTime.TryParse(selectDate, out initDate))
                {
                    monthCalendar1.SelectionStart = initDate;
                }
            }
        }

        /// <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日がセットされます。

以上です。

コメント

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