テキストボックスに入力された文字列が正しいかチェックするサンプルです。
サンプルとして、isString メソッドを作成しました。
isString メソッドは入力チェックでエラーがあればErrorProviderに警告を通知します。
入力チェックの内容
・必須チェック
必須指定の場合、未入力なら警告を通知します。
・最大バイト数チェック
指定の最大BYTE数を超えているなら警告を通知します。
・文字区分チェック
混在指定(引数省略可)・・・何もチェックしません。
全角のみ指定 ・・・半角文字が含まれているなら警告を通知します。
半角のみ指定 ・・・全角文字が含まれているなら警告を通知します。
です。
文字列入力チェック(isString)の引数
No | 型 | 引数 | 内容 |
1 | ErrorProvider | ErrorProvider | 警告時に通知するErrorProvider |
2 | string | 項目名 | 警告時に表示する項目名 |
3 | TextBox | テキストボックス | チェック対象のテキストボックス |
4 | bool | 必須区分 | true:必須 false:必須でない |
5 | int | 最大BYTE数 | 最大のBYTE数 |
6 | StrKind | 文字区分 | mix:全角半角混在 full:全角のみ half:半角のみ |
サンプルの内容
①~③のチェックを行い、エラーがあれば警告の通知をメソッド内で行います。
正常であればtrue、エラーならfalseを返します。
① 必須チェックをする
IsNullOrEmptyを使用してnullか空の文字列かを判定しています。
② 最大バイト数チェックをする
GetByteCountを使用してBYTE数を取得し、最大BYTE数と比較して判定しています。
③ 文字区分チェックをする
GetByteCountの値と文字数を比較して判定しています。
使用部品

No | 項目名 | Text | name | 部品 |
1 | 必須チェック(見出し) | 必須チェック | label1 | Label |
2 | 必須チェック(入力欄) | 空 | textBox1 | TextBox |
3 | BYTE数チェック(見出し) | BYTE数チェック | label2 | Label |
4 | BYTE数チェック(入力欄) | 空 | textBox2 | TextBox |
5 | 全角のみチェック(見出し) | 全角のみチェック | label3 | Label |
6 | 全角のみチェック(入力欄) | 空 | textBox3 | TextBox |
7 | 半角のみチェック(見出し) | 半角のみチェック | label4 | Label |
8 | 半角のみチェック(入力欄) | 空 | textBox4 | TextBox |
9 | チェックボタン | チェック | button1 | Button |
プログラミング
言語: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を指定)

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

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

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

以上です。