C# 文字列の入力チェック

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

概要説明 

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

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

isString メソッドは入力チェックでエラーがあればErrorProviderに警告を通知します。

入力チェックの内容

・必須チェック

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

・最大バイト数チェック

 指定の最大BYTE数を超えているなら警告を通知します。

・文字区分チェック

 混在指定(引数省略可)・・・何もチェックしません。

 全角のみ指定     ・・・半角文字が含まれているなら警告を通知します。

 半角のみ指定     ・・・全角文字が含まれているなら警告を通知します。

です。

文字列入力チェック(isString)の引数

No引数内容
1ErrorProviderErrorProvider警告時に通知するErrorProvider
2string項目名警告時に表示する項目名
3TextBoxテキストボックスチェック対象のテキストボックス
4bool必須区分true:必須 false:必須でない
5int最大BYTE数最大のBYTE数
6StrKind文字区分mix:全角半角混在 full:全角のみ half:半角のみ

サンプルの内容

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

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

① 必須チェックをする

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

② 最大バイト数チェックをする

 GetByteCountを使用してBYTE数を取得し、最大BYTE数と比較して判定しています。

③ 文字区分チェックをする

 GetByteCountの値と文字数を比較して判定しています。

使用部品

No項目名Textname部品
1必須チェック(見出し)必須チェックlabel1Label
2必須チェック(入力欄)textBox1TextBox
3BYTE数チェック(見出し)BYTE数チェックlabel2Label
4BYTE数チェック(入力欄)textBox2TextBox
5全角のみチェック(見出し)全角のみチェックlabel3Label
6全角のみチェック(入力欄)textBox3TextBox
7半角のみチェック(見出し)半角のみチェックlabel4Label
8半角のみチェック(入力欄)textBox4TextBox
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 WindowsFormsApp18
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // 文字区分
        enum StrKind
        {
            mix,    // 全角半角混在
            full,   // 全角のみ
            half    // 半角のみ
        };

        // 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)
        {
            // ErrorProviderをクリアします。
            ep.Clear();

            // 必須チェックの確認
            isString(ep, "例1", textBox1, true, 20);

            // 最大BYTE数の確認
            isString(ep, "例2", textBox2, false, 20);

            // 全角のみの確認
            isString(ep, "例3", textBox3, false, 20, StrKind.full);

            // 半角のみの確認
            isString(ep, "例4", textBox4, false, 20, StrKind.half);
        }

        /// <summary>
        /// 文字列の入力チェック
        /// </summary>
        /// <param name="ep">ErrorProvider</param>
        /// <param name="itemName">項目名</param>
        /// <param name="c">TextBox</param>
        /// <param name="required">必須区分(true:必須 false:必須でない)</param>
        /// <param name="maxByteLength">最大BYTE数</param>
        /// <param name="strKind">文字区分(mix:全角半角混在 full:全角のみ half:半角のみ)</param>
        /// <returns>結果</returns>
        static bool isString(ErrorProvider ep,
                             string itemName,
                             TextBox c,
                             bool required,
                             int maxByteLength,
                             StrKind strKind = StrKind.mix)
        {
            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;
                }
            }

            // バイト数を取得する
            Encoding encoding = Encoding.GetEncoding("shift_jis");
            int count = encoding.GetByteCount(c.Text);

            // 最大BYTE数を超えているか判定する
            if (count > maxByteLength)
            {
                // 最大BYTE数超えの警告を通知する
                msg = $"{itemName} は、最大文字数({maxByteLength} BYTE)を超えています。";
                ep.SetError(c, msg);

                // CHECK NG
                return false;
            }

            // 文字区分を判定する
            if (strKind == StrKind.full)
            {
                // 全角のみか判定する
                if (count != c.Text.Length * 2)
                {
                    // 全角のみでない警告を通知する
                    msg = $"{itemName} に、全角以外の文字が含まれています。";
                    ep.SetError(c, msg);

                    // CHECK NG
                    return false;
                }
            }
            else if (strKind == StrKind.half)
            {
                // 半角のみか判定する
                if (count != c.Text.Length)
                {
                    // 半角以外のみでない警告を通知する
                    msg = $"{itemName} に、半角以外の文字が含まれています。";
                    ep.SetError(c, msg);

                    // CHECK NG
                    return false;
                }
            }

            // CHECK OK
            return true;
        }
    }
}

実行結果

チェックボタンをクリックします。

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

BYTE数チェックの警告が通知されます。(最大BYTE数20を指定)

全角のみチェックの警告が通知されます。

半角のみチェックの警告が通知されます。

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

以上です。

コメント

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