C# 日付の入力チェック

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

概要説明 

テキストボックスに入力された日付が正しいかチェックするサンプルです。

サンプルとして、isDateメソッド、isDateFromToメソッドを作成しました。

 

isDateメソッドは日付チェックを行いエラーがあればErrorProviderに警告を通知します。

isDateFromToメソッドは開始日と終了日の大小関係をチェックします。

こちらもエラーがあればErrorProviderに警告を通知します。

 

入力チェックの内容

日付チェック

・必須チェック

 必須指定の場合、未入力なら警告を通知します。

・日付チェック

 日付に変換できない場合、警告を通知します。

日付チェック(isDate)の引数
No引数内容
1ErrorProviderErrorProvider警告時に通知するErrorProvider
2string項目名警告時に表示する項目名
3TextBoxテキストボックスチェック対象のテキストボックス
4bool必須区分true:必須 false:必須でない

日付期間チェック

・日付期間チェック

 終了日が開始日より前なら警告を通知します。

日付チェック(isDateFromTo)の引数
No引数内容
1ErrorProviderErrorProvider警告時に通知するErrorProvider
1string開始日の項目名警告時に表示する項目名
3string終了日の項目名警告時に表示する項目名
4TextBox開始日チェック対象のテキストボックス
5TextBox終了日チェック対象のテキストボックス

サンプルの内容

①~③のチェックを行い、エラーがあれば警告の通知をメソッド内で行います。

正常であればtrue、エラーならfalseを返します。

① 必須チェックをする

 IsNullOrEmptyを使用してnullか空の文字列かを判定しています。

② 日チェック

 TryParseを使用して日付に変換できるか判定しています。

③ 日付期間チェック

 開始日と終了日をDateTimeに変換し大小判定しています。

 開始日と終了日の何れかが、nullか空文字の場合はチェックを行わずtrueを返します。

 また、開始日と終了日の日付にエラーがないことを判定し呼び出しています。

 

使用部品

No項目名Textname部品
1誕生日(見出し)誕生日label1Label
2誕生日(入力欄)txtBirthdayTextBox
3有効期間(見出し)有効期間label2Label
4有効期間・開始(入力欄)txtDateFomTextBox
6有効期間・終了(入力欄)txtDateToTextBox
9チェックボタンチェックbutton1Button

プログラミング

言語:C#

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 WindowsFormsApp19
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // ErrorProviderのインスタンス生成
        ErrorProvider ep = new ErrorProvider();

        // 画面起動時処理
        private void Form1_Load(object sender, EventArgs e)
        {
            // ErrorProviderのアイコンを点滅なしに設定する
            ep.BlinkStyle = ErrorBlinkStyle.NeverBlink;
        }

        /// <summary>
        /// チェックボタンクリック処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            // エラーフラグ
            bool errFlg = false;

            // ErrorProviderをクリアします。
            ep.Clear();

            // 誕生日の日付チェック
            if ( !isDate(ep, "誕生日", txtBirthday, true))
            {
                errFlg = true;
            }

            // 有効期間(開始)の日付チェック
            if (!isDate(ep, "有効期間(開始)", txtDateFom, false))
            {
                errFlg = true;
            }

            // 有効期間(終了)の日付チェック
            if (!isDate(ep, "有効期間(終了)", txtDateTo, false))
            {
                errFlg = true;
            }

            if ( errFlg == false )
            {
                isDateFromTo(ep, "有効期間(開始)", "有効期間(終了)", txtDateFom, txtDateTo);
            }
        }

        /// <summary>
        /// 日付チェック
        /// </summary>
        /// <param name="ep">ErrorProvider</param>
        /// <param name="itemName">項目名</param>
        /// <param name="c">TextBox</param>
        /// <param name="required">必須区分(true:必須 false:必須でない)</param>
        /// <returns>結果</returns>
        static bool isDate(ErrorProvider ep, string itemName,TextBox c,bool required)
        {
            string msg = "";

            // nullか空の文字列か判定する
            if (String.IsNullOrEmpty(c.Text))
            {
                // 必須チェックを行うか判定する
                if (required)
                {
                    // 未入力の警告を通知する。
                    msg = $"{itemName} は、必須項目です。";
                    ep.SetError(c, msg);

                    // CHECK NG
                    return false;
                }
                else
                {
                    // CHECK OK
                    return true;
                }
            }

            // 日付か判定する
            DateTime d;
            if (!DateTime.TryParse(c.Text, out d))
            {
                // 日付でない警告を通知する
                msg = $"{itemName} は、日付ではありません。";
                ep.SetError(c, msg);

                // CHECK NG
                return false;
            }

            // CHECK OK
            return true;
        }

        /// <summary>
        /// 日付期間チェック
        /// </summary>
        /// <param name="ep">ErrorProvider</param>
        /// <param name="itemName1">開始日の項目名</param>
        /// <param name="itemName2">終了日の項目名</param>
        /// <param name="c1">開始日</param>
        /// <param name="c2">終了日</param>
        /// <returns>結果</returns>
        static bool isDateFromTo(ErrorProvider ep, string itemName1, string itemName2, TextBox c1, TextBox c2)
        {
            string msg = "";

            // 開始と終了のどちらかが、null又は空文字か判定する
            if (String.IsNullOrEmpty(c1.Text) || String.IsNullOrEmpty(c2.Text))
            {
                // CHECK OK
                return true;
            }

            // 日付か判定する
            DateTime d1 = DateTime.Parse(c1.Text);
            DateTime d2 = DateTime.Parse(c2.Text);

            // 終了日が開始日より前か判定する
            if (d2 < d1)
            {
                // 終了日が開始日より前の警告を通知する
                msg = $"{itemName2} が、{itemName1} より前の日付です。";

                // 終了日の警告をセット
                ep.SetError(c2, msg);

               // CHECK NG
                return false;
            }

            // CHECK OK
            return true;
        }

    }
}

実行結果

誕生日:必須チェックの警告が通知されます。

有効期間(開始):日付でない警告が通知されます。

有効期間(終了):日付でない警告が通知されます。

終了日が開始日より前の警告が通知されます。

エラーがない場合には通知されません。

開始と終了のどちらかが未入力の場合には期間チェックは行いませんので、警告は通知されません。

以上です。

コメント

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