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; で入力をキャンセルします。

小数点を許可する方法

金額など、小数点を含む数値の入力を許可したい場合は、以下のようにコードを修正します:

private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 数字、バックスペース、小数点を許可
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.')
    {
        e.Handled = true;
        return;
    }

    // 小数点が既に存在する場合は、2つ目の小数点を許可しない
    if (e.KeyChar == '.' && ((TextBox)sender).Text.IndexOf('.') > -1)
    {
        e.Handled = true;
    }
}

このコードでは、小数点の入力を許可しつつ、2つ目の小数点の入力を防いでいます。

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

KeyPressイベントの代わりに、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)
    {
        TextBox textBox = (TextBox)sender;
        if (Regex.IsMatch(textBox.Text, "[^0-9]"))
        {
            textBox.Text = Regex.Replace(textBox.Text, "[^0-9]", "");
            textBox.SelectionStart = textBox.Text.Length;
        }
    }
}

このコードでは、正規表現を使用して数字以外の文字を削除しています。

まとめ

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

  1. KeyPressイベントを使用する方法
  2. TextChangedイベントを使用する方法

KeyPressイベントは入力時のリアルタイム制御に適しており、TextChangedイベントはより広範囲の入力操作に対応できます。アプリケーションの要件に応じて、適切な方法を選択してください。

これらの技術を使用することで、ユーザーの入力エラーを防ぎ、データの整合性を保つことができます。数値入力フォームや計算機能を持つアプリケーションなど、様々な場面で活用できるでしょう。

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

コメント

コメントする

目次