MENU

C# テキスト ボックスで特定の文字だけを許可する

C#でWindowsフォームアプリケーションを開発する際、ユーザーの入力を特定の文字だけに制限したい場面がよくあります。例えば、数字のみの入力や、特定のフォーマットに従った入力を要求する場合などです。この記事では、C#を使ってテキストボックスで特定の文字だけを許可する方法を、初心者にも分かりやすく解説します。

目次

KeyPressイベントを使用する方法

テキストボックスの入力を制限する最も一般的な方法は、KeyPressイベントを使用することです。このイベントは、ユーザーがキーを押すたびに発生し、入力される文字を制御することができます。

以下に、数字とバックスペースのみを許可する例を示します:

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        textBox1.KeyPress += TextBox1_KeyPress;
    }

    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 数字とバックスペース以外の文字は無効化
        if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back)
        {
            e.Handled = true;
        }
    }
}

このコードの主なポイントは以下の通りです:

  1. textBox1.KeyPress += TextBox1_KeyPress; で、テキストボックスのKeyPressイベントにイベントハンドラを追加します。
  2. char.IsDigit(e.KeyChar) で、入力された文字が数字かどうかをチェックします。
  3. e.KeyChar != (char)Keys.Back で、バックスペースキーを許可します。
  4. 条件に合わない場合、e.Handled = true; で入力をキャンセルします。

正規表現を使用する方法

より複雑な入力制限が必要な場合は、正規表現を使用する方法も効果的です。以下は、英字と数字のみを許可する例です:

using System;
using System.Windows.Forms;
using System.Text.RegularExpressions;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        textBox1.KeyPress += TextBox1_KeyPress;
    }

    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Back) return; // バックスペースは常に許可

        string pattern = @"^[a-zA-Z0-9]$";
        if (!Regex.IsMatch(e.KeyChar.ToString(), pattern))
        {
            e.Handled = true;
        }
    }
}

このコードでは:

  1. ^[a-zA-Z0-9]$ というパターンで、英字と数字のみにマッチする正規表現を定義しています。
  2. Regex.IsMatch() メソッドで、入力文字が正規表現パターンに一致するかをチェックします。

TextChangedイベントを使用する方法

入力後にテキストを検証したい場合は、TextChangedイベントを使用します。これは、テキストボックスの内容が変更されるたびに発生するイベントです。

using System;
using System.Windows.Forms;
using System.Text.RegularExpressions;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        textBox1.TextChanged += TextBox1_TextChanged;
    }

    private void TextBox1_TextChanged(object sender, EventArgs e)
    {
        string pattern = @"^[a-zA-Z0-9]*$";
        if (!Regex.IsMatch(textBox1.Text, pattern))
        {
            int selectionStart = textBox1.SelectionStart;
            textBox1.Text = Regex.Replace(textBox1.Text, @"[^a-zA-Z0-9]", "");
            textBox1.SelectionStart = selectionStart - 1;
        }
    }
}

このアプローチでは:

  1. テキストボックスの内容全体を正規表現でチェックします。
  2. 無効な文字が見つかった場合、それらを除去します。
  3. カーソル位置を適切に調整して、ユーザーの入力体験を損なわないようにします。

まとめ

C#でテキストボックスの入力を特定の文字だけに制限する方法として、主に以下の3つのアプローチがあります:

  1. KeyPressイベントを使用する方法
  2. 正規表現を使用する方法
  3. TextChangedイベントを使用する方法

これらの方法を適切に使用することで、ユーザーの入力エラーを防ぎ、データの整合性を保つことができます。アプリケーションの要件に応じて、最適な方法を選択してください。特定の文字だけを許可することで、フォームの入力精度が向上し、後続の処理がよりスムーズになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次