カテゴリ: C# 更新日: 2026/05/25

C# GUIアプリで入力検証(バリデーション)を行う方法!WinForms・WPF初心者向け解説

C#のGUIアプリで入力検証を行うテクニック
C#のGUIアプリで入力検証を行うテクニック

先生と生徒の会話形式で理解しよう

生徒

C#でGUIアプリを作っているのですが、ユーザーが間違ったデータを入力しないように制限したいです。どうすればいいですか?

先生

それは入力検証、通称バリデーションという大事な工程ですね。ユーザーが意図しない操作をしても、アプリが正しく動くように防御する仕組みです。

生徒

難しそうですが、パソコンを触ったばかりの私でも設定できますか?

先生

大丈夫ですよ。まずは基本的な仕組みから一緒に見ていきましょう。

1. 入力検証(バリデーション)とは何か

1. 入力検証(バリデーション)とは何か
1. 入力検証(バリデーション)とは何か

プログラミングにおいて、入力検証とはユーザーから受け取ったデータが正しい形式や範囲内であるかを確認する処理のことです。英語ではバリデーションと呼びます。例えば、年齢を入力する欄にアルファベットや記号が入っていたら、計算ができませんよね。そういった間違いを未然に防ぐのがこの処理の目的です。

C#でデスクトップアプリを作る際、WinForms(ウィンドウフォーム)やWPF(ダブリューピーエフ)という技術を使いますが、どちらの場合もこの入力検証は非常に重要です。なぜなら、無効なデータはアプリの強制終了や予期せぬエラーの原因になるからです。例えるなら、書類の記入漏れがないか窓口でチェックするような作業ですね。

2. WinFormsでErrorProviderを使う基本

2. WinFormsでErrorProviderを使う基本
2. WinFormsでErrorProviderを使う基本

WinFormsには、簡単にエラーを表示できる「ErrorProvider」という便利な部品があります。これを使うと、入力欄の横に小さなアイコンを表示し、マウスを合わせるとエラーメッセージを出すことができます。初心者の方でも直感的に設定できるので、最初におすすめしたいテクニックです。

まずはツールボックスから「ErrorProvider」をフォームにドラッグ&ドロップしてください。そして、ボタンをクリックした時にチェックを走らせます。


private void btnSubmit_Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(txtName.Text))
    {
        errorProvider1.SetError(txtName, "名前を入力してください。");
    }
    else
    {
        errorProvider1.SetError(txtName, "");
    }
}

このコードでは、名前の入力欄が空かどうかを判定しています。「string.IsNullOrEmpty」という命令は、中身が空っぽかどうかを調べる道具です。空ならエラーを表示し、何かが入っていればエラーを消すという仕組みです。

3. 数値のみを入力させるテクニック

3. 数値のみを入力させるテクニック
3. 数値のみを入力させるテクニック

次に、数値専用の入力欄を作る方法を紹介します。例えば、電話番号や年齢の入力欄を作るとき、文字が入ってしまうと困りますよね。これを防ぐために、キーボードが押された瞬間にチェックする方法があります。

「KeyPress(キープレス)」イベントというものを使います。これはキーが押されるたびに実行される命令です。この中で、押されたキーが数字かどうかを判定し、数字以外なら入力をキャンセルします。


private void txtAge_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

「char.IsDigit」は、押されたキーが0から9の数字かどうかをチェックする便利な命令です。このコードでは、数字以外が入力された場合に「e.Handled = true」とすることで、入力を無効化(なかったことに)しています。これでユーザーは数字以外入力できなくなります。

4. WPFでデータバインディングと検証ルールを活用する

4. WPFでデータバインディングと検証ルールを活用する
4. WPFでデータバインディングと検証ルールを活用する

次に、より現代的なWPFの技術を見ていきましょう。WPFでは「データバインディング」という、画面とプログラムのデータを自動的に連動させる仕組みがあります。これに「ValidationRule(バリデーションルール)」という検証用のルールを組み合わせるのが一般的です。

少し難しく聞こえるかもしれませんが、これは「ルールを決めておけば、画面が勝手に間違いをチェックしてくれる」という非常に効率的な仕組みです。大規模なアプリケーション開発では必須の知識となります。


public class AgeValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        int age;
        if (int.TryParse(value.ToString(), out age) && age >= 0 && age <= 120)
        {
            return ValidationResult.ValidResult;
        }
        return new ValidationResult(false, "0から120の数字を入力してください。");
    }
}

「int.TryParse」は、文字を数値に変換できるか試す命令です。変換できなければfalse、できれば数字として扱います。このようにクラスを作ることで、年齢という条件をいつでもどこでもチェックできるようになります。プログラムを整理整頓して書くための、大切な一歩です。

5. 正規表現を使った複雑な入力チェック

5. 正規表現を使った複雑な入力チェック
5. 正規表現を使った複雑な入力チェック

最後は、少し進んだテクニックとして「正規表現(せいきひょうげん)」を紹介します。これは、データの並び方をパターンで指定する手法です。例えば、メールアドレスの形式である「文字列@文字列.文字列」になっているかを確認したいとき、一つ一つ文字を調べるのは大変ですよね。

正規表現を使うと、たった一行のルールで高度なチェックが可能になります。C#では「System.Text.RegularExpressions」という機能を使います。


using System.Text.RegularExpressions;

bool isValid = Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$");
if (!isValid)
{
    // エラー処理
}

「Regex.IsMatch」は、入力されたデータが指定したパターンに合致するかを判定します。この@やドットを含むパターンを書くことで、メールアドレスとして正しい形をしているか即座に確認できます。初心者の段階では少し難解に感じるかもしれませんが、覚えておくと非常に強力なツールとなります。

6. 良いユーザー体験を作るために

6. 良いユーザー体験を作るために
6. 良いユーザー体験を作るために

入力検証において最も大切なのは、ユーザーに対して「何が間違っているのか」を優しく伝えることです。エラーメッセージが冷たいと、ユーザーは「このアプリは難しい」と感じて使わなくなってしまいます。「名前を入力してください」や「数字以外は入力できません」といった、具体的で分かりやすいメッセージを心がけましょう。

また、ボタンを押したときだけでなく、入力中や入力が終わった瞬間にチェックを行うと、ユーザーは間違いに早く気づけます。GUIアプリケーションにおいては、スムーズな操作感も機能の一部です。使いやすさと安全性を両立させるアプリ作りを目指しましょう。

これからも、C#の学習を続けていくと、さらに便利な機能に出会えます。今回学んだエラープロバイダーやイベント処理は、どんなGUIアプリを作る時にも必ず役に立つ基礎知識です。焦らず一つずつ試しながら、自分だけのアプリケーションを作り上げてください。

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
New2
C#
C#の拡張メソッドとは?既存クラスに機能を追加する便利技
New3
C#
ASP.NET CoreとC#の例外処理ベストプラクティス!エラーハンドリングの基本と実装方法
New4
Azure
Azure WAFとは?SQLインジェクションやXSSからWebサイトを守る初心者ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.3
Java&Spring記事人気No3
C#
C# WinForms入門!初心者でも簡単にWindowsアプリを作る方法
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
No.6
Java&Spring記事人気No6
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.7
Java&Spring記事人気No7
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.8
Java&Spring記事人気No8
C#
C#でファイルパス操作の便利なテクニック!Pathクラスの使い方をわかりやすく解説