[C#] TextBoxで半角英数字のみを許可する方法

C#でTextBoxに半角英数字のみを許可する方法は、主にイベントハンドラを使用して実現します。

具体的には、TextBoxのKeyPressイベントを利用します。

このイベントで入力されたキーが半角英数字かどうかをチェックし、許可されていない場合はe.Handledtrueに設定して入力を無効にします。

半角英数字は、ASCIIコードで48から57(数字)、65から90(大文字アルファベット)、97から122(小文字アルファベット)に該当します。

これにより、ユーザーがTextBoxに入力できる文字を制限することができます。

この記事でわかること
  • TextBoxで半角英数字を制限する方法
  • KeyPressイベントの活用法
  • 特定の記号や数字の許可方法
  • 大文字小文字の自動変換の実装
  • 複数のTextBoxへの適用方法

目次から探す

半角英数字のみを許可する方法

C#のWindowsフォームアプリケーションにおいて、TextBoxに半角英数字のみを許可する方法について解説します。

これにより、ユーザーが不正な文字を入力するのを防ぐことができます。

KeyPressイベントの利用

TextBoxのKeyPressイベントを利用することで、ユーザーが入力した文字をリアルタイムで検証できます。

このイベントは、ユーザーがキーを押したときに発生し、入力された文字を制御することが可能です。

以下は、KeyPressイベントを使用して半角英数字のみを許可するサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(TextBox1_KeyPress);
    }
    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 入力された文字が半角英数字かどうかを判定
        if (!char.IsControl(e.KeyChar) && !char.IsLetterOrDigit(e.KeyChar))
        {
            // 半角英数字以外の文字は無効
            e.Handled = true; 
        }
    }
}

このコードでは、TextBoxに対してKeyPressイベントハンドラを追加し、入力された文字が半角英数字でない場合にe.Handledtrueに設定しています。

これにより、無効な文字の入力を防ぎます。

ASCIIコードによる判定

ASCIIコードを使用して、入力された文字が半角英数字であるかを判定することもできます。

半角英数字のASCIIコードは以下の通りです。

スクロールできます
文字ASCIIコード
0-948-57
A-Z65-90
a-z97-122

この範囲内の文字のみを許可するように、KeyPressイベントで判定を行います。

以下は、ASCIIコードを用いた判定のサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(TextBox1_KeyPress);
    }
    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // ASCIIコードを用いて半角英数字を判定
        if (!char.IsControl(e.KeyChar) && 
            !(e.KeyChar >= 48 && e.KeyChar <= 57) && // 0-9
            !(e.KeyChar >= 65 && e.KeyChar <= 90) && // A-Z
            !(e.KeyChar >= 97 && e.KeyChar <= 122)) // a-z
        {
            // 半角英数字以外の文字は無効
            e.Handled = true; 
        }
    }
}

このコードでは、入力された文字のASCIIコードをチェックし、半角英数字以外の文字が入力された場合にe.Handledtrueに設定しています。

e.Handledプロパティの設定

e.Handledプロパティは、イベントが処理されたかどうかを示すブール値です。

このプロパティをtrueに設定することで、入力された文字を無効にすることができます。

KeyPressイベント内でe.Handledを設定することで、ユーザーが無効な文字を入力した際に、その入力をキャンセルすることができます。

これにより、TextBoxには半角英数字のみが入力されることになります。

このように、KeyPressイベントを利用し、ASCIIコードによる判定を行い、e.Handledプロパティを設定することで、TextBoxに半角英数字のみを許可することができます。

実装手順

C#のWindowsフォームアプリケーションで、TextBoxに半角英数字のみを許可するための実装手順を解説します。

以下の手順に従って、実装を進めていきましょう。

TextBoxの配置

まず、Visual Studioのデザイナーを使用して、フォームにTextBoxを配置します。

以下の手順で行います。

  1. 新しいWindowsフォームプロジェクトを作成します。
  2. ツールボックスからTextBoxを選択し、フォーム上にドラッグ&ドロップします。
  3. TextBoxのプロパティを設定します。

例えば、NameプロパティをtextBox1に設定します。

KeyPressイベントハンドラの追加

次に、TextBoxのKeyPressイベントハンドラを追加します。

これにより、ユーザーが入力した文字をリアルタイムで検証できるようになります。

STEP
TextBoxを選択し、プロパティウィンドウを開きます。
STEP
イベントタブ(雷のアイコン)をクリックします。
STEP
KeyPressイベントを見つけ、ダブルクリックします。

これにより、イベントハンドラが自動的に生成されます。

コード例の解説

以下に、TextBoxに半角英数字のみを許可するためのコード例を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(TextBox1_KeyPress);
    }
    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 入力された文字が半角英数字かどうかを判定
        if (!char.IsControl(e.KeyChar) && !char.IsLetterOrDigit(e.KeyChar))
        {
            // 半角英数字以外の文字は無効
            e.Handled = true; 
        }
    }
}
  • partial class MyForm : FormMyFormクラスがWindowsフォームを継承しています。
  • InitializeComponent();:フォームの初期化を行います。
  • textBox1.KeyPress += new KeyPressEventHandler(TextBox1_KeyPress);:TextBoxのKeyPressイベントにハンドラを追加します。
  • private void TextBox1_KeyPress(object sender, KeyPressEventArgs e):KeyPressイベントが発生した際に呼び出されるメソッドです。
  • if (!char.IsControl(e.KeyChar) && !char.IsLetterOrDigit(e.KeyChar)):入力された文字が制御文字でもなく、英数字でもない場合の判定を行います。
  • e.Handled = true;:無効な文字が入力された場合、入力をキャンセルします。

このように、TextBoxの配置からイベントハンドラの追加、コードの解説までを行うことで、半角英数字のみを許可する機能を実装することができます。

応用例

C#のWindowsフォームアプリケーションにおいて、TextBoxに対する入力制限をさらに応用する方法をいくつか紹介します。

これにより、特定の要件に応じた入力制限を実装することができます。

特定の記号を許可する方法

特定の記号を許可する場合、KeyPressイベント内で許可する文字を追加することができます。

例えば、アンダースコア(_)とハイフン(-)を許可する場合のコードは以下の通りです。

private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 入力された文字が半角英数字または特定の記号かどうかを判定
    if (!char.IsControl(e.KeyChar) && 
        !char.IsLetterOrDigit(e.KeyChar) && 
        e.KeyChar != '_' && e.KeyChar != '-')
    {
        // 許可されていない文字は無効
        e.Handled = true; 
    }
}

このコードでは、半角英数字に加えてアンダースコアとハイフンも許可しています。

数字のみを許可する方法

数字のみを許可する場合は、KeyPressイベントで数字の範囲をチェックします。

以下は、数字のみを許可するためのサンプルコードです。

private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 入力された文字が数字かどうかを判定
    if (!char.IsControl(e.KeyChar) && (e.KeyChar < '0' || e.KeyChar > '9'))
    {
        // 数字以外の文字は無効
        e.Handled = true; 
    }
}

このコードでは、入力された文字が数字でない場合にe.Handledtrueに設定し、無効な入力を防ぎます。

大文字小文字の自動変換

ユーザーが入力した文字を自動的に大文字または小文字に変換することも可能です。

以下は、入力された文字を自動的に大文字に変換するサンプルコードです。

private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 入力された文字を大文字に変換
    e.KeyChar = char.ToUpper(e.KeyChar);
}

このコードでは、入力された文字をchar.ToUpperメソッドを使用して大文字に変換しています。

これにより、ユーザーが小文字を入力しても自動的に大文字に変換されます。

このように、特定の記号を許可したり、数字のみを許可したり、大文字小文字の自動変換を行うことで、TextBoxの入力制限を柔軟にカスタマイズすることができます。

よくある質問

KeyPressイベント以外の方法はある?

はい、KeyPressイベント以外にも入力制限を行う方法があります。

例えば、TextBoxのValidatingイベントを使用することで、フォーカスが外れた際に入力内容を検証することができます。

この方法では、ユーザーが入力を終えた後に制限を適用することが可能です。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    // 入力内容を検証
    if (!Regex.IsMatch(textBox1.Text, @"^[a-zA-Z0-9]*$"))
    {
        // 無効な入力の場合、エラーメッセージを表示
        MessageBox.Show("半角英数字のみを入力してください。");
        e.Cancel = true; // フォーカスを戻す
    }
}

このコードでは、正規表現を使用して入力内容を検証しています。

複数のTextBoxに同じ制限を適用するには?

複数のTextBoxに同じ入力制限を適用する場合、共通のイベントハンドラを作成し、各TextBoxにそのハンドラを割り当てることができます。

以下はその方法の例です。

public MyForm()
{
    InitializeComponent();
    textBox1.KeyPress += new KeyPressEventHandler(TextBox_KeyPress);
    textBox2.KeyPress += new KeyPressEventHandler(TextBox_KeyPress);
}
private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    // 入力された文字が半角英数字かどうかを判定
    if (!char.IsControl(e.KeyChar) && !char.IsLetterOrDigit(e.KeyChar))
    {
        e.Handled = true; // 無効な文字は無視
    }
}

このように、TextBox_KeyPressメソッドを共通のハンドラとして使用することで、複数のTextBoxに同じ制限を簡単に適用できます。

入力制限が効かない場合の対処法は?

入力制限が効かない場合、以下の点を確認してください。

  • イベントハンドラが正しく設定されているか:TextBoxのKeyPressイベントに正しいハンドラが割り当てられているか確認します。
  • e.Handledプロパティの設定:無効な文字が入力された場合にe.Handledtrueに設定しているか確認します。
  • 他のイベントとの干渉:他のイベント(例:TextChangedイベントなど)が影響していないか確認します。
  • プロパティ設定:TextBoxのMultilineプロパティがtrueになっている場合、KeyPressイベントが期待通りに動作しないことがあります。

この場合は、Multilinefalseに設定するか、別の方法で制限を行う必要があります。

これらの点を確認することで、入力制限が効かない問題を解決できる可能性があります。

まとめ

この記事では、C#のWindowsフォームアプリケーションにおいてTextBoxに半角英数字のみを許可する方法について詳しく解説しました。

具体的には、KeyPressイベントを利用した入力制限の実装手順や、特定の記号を許可する方法、数字のみを許可する方法、大文字小文字の自動変換などの応用例を紹介しました。

これらの技術を活用することで、ユーザーが意図しない入力を防ぎ、アプリケーションの使いやすさを向上させることが可能です。

ぜひ、実際のプロジェクトにこれらの知識を活かして、より良いユーザー体験を提供してみてください。

  • URLをコピーしました!
目次から探す