[C#] TextBoxで数値のみを入力可能にする方法

C#でTextBoxに数値のみを入力可能にするには、いくつかの方法があります。

最も一般的な方法は、TextBoxのKeyPressイベントを利用して、入力されたキーが数字かどうかをチェックすることです。

イベントハンドラ内で、e.KeyCharを使って入力された文字を取得し、Char.IsDigitメソッドで数字かどうかを判定します。

数字でない場合は、e.Handledtrueに設定して入力を無効にします。

また、TextChangedイベントを使用して、入力後にテキスト全体を検証し、数値以外の文字が含まれている場合に削除する方法もあります。

これにより、ユーザーが数値以外の文字を入力するのを防ぐことができます。

この記事でわかること
  • TextBoxで数値入力を制限する方法
  • KeyPressイベントの活用法
  • TextChangedイベントによる入力チェック
  • MaskedTextBoxの利用シーン
  • 応用例としての数値入力の拡張

目次から探す

TextBoxで数値のみを入力可能にする基本的な方法

C#のWindowsフォームアプリケーションにおいて、TextBoxコントロールを使用して数値のみを入力可能にする方法はいくつかあります。

ここでは、KeyPressイベント、TextChangedイベント、そしてMaskedTextBoxを用いた実装方法について詳しく解説します。

KeyPressイベントを用いた実装

KeyPressイベントの概要

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.IsDigit(e.KeyChar))
        {
            e.Handled = true; // 入力を無効にする
        }
    }
}

このコードを実行すると、TextBoxには数字のみが入力可能になります。

バックスペースキーの処理

バックスペースキーを使用して文字を削除することも可能です。

上記のコードでは、char.IsControl(e.KeyChar)を使用することで、バックスペースキーの入力を許可しています。

小数点やマイナス記号の許可

小数点やマイナス記号を許可する場合、以下のように条件を追加します。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 数字、小数点、マイナス記号以外の入力を無効にする
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
        e.KeyChar != '.' && e.KeyChar != '-')
    {
        e.Handled = true; // 入力を無効にする
    }
}

このようにすることで、数値、小数点、マイナス記号の入力が可能になります。

TextChangedイベントを用いた実装

TextChangedイベントの概要

TextChangedイベントは、TextBoxの内容が変更されたときに発生します。

このイベントを利用して、入力された内容をリアルタイムでチェックすることができます。

正規表現を用いた数値チェック

以下のサンプルコードでは、正規表現を使用して数値のみを許可する方法を示します。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    // 正規表現を使用して数値チェック
    if (!Regex.IsMatch(textBox1.Text, @"^\d*\.?\d*$"))
    {
        // 不正な入力があった場合、最後の文字を削除
        textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
        textBox1.SelectionStart = textBox1.Text.Length; // カーソルを最後に移動
    }
}

このコードを実行すると、TextBoxには数値のみが入力されるようになります。

入力後のテキスト修正方法

TextChangedイベントを使用することで、ユーザーが不正な入力を行った場合に自動的に修正することができます。

上記のコードでは、正規表現にマッチしない場合に最後の文字を削除しています。

MaskedTextBoxを用いた実装

MaskedTextBoxの概要

MaskedTextBoxは、特定の形式の入力を強制するためのコントロールです。

数値入力専用のマスクを設定することで、ユーザーが正しい形式で入力することを促すことができます。

数値入力用のマスク設定

以下のサンプルコードでは、MaskedTextBoxを使用して数値入力用のマスクを設定しています。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "00000"; // 5桁の数字を入力するマスク
    }
}

このコードを実行すると、MaskedTextBoxには5桁の数字のみが入力可能になります。

MaskedTextBoxの利点と制限

MaskedTextBoxの利点は、ユーザーが入力する際に自動的にマスクが適用されるため、入力形式を強制できる点です。

しかし、柔軟性に欠けるため、特定の条件(例えば、小数点や負の数)を許可する場合には、他の方法と組み合わせる必要があります。

応用例

ここでは、TextBoxで数値のみを入力可能にする基本的な方法を応用した具体的な例を紹介します。

小数点を含む数値、負の数、特定の範囲内の数値を入力できるようにする方法を解説します。

小数点を含む数値の入力

小数点を含む数値を入力可能にするためには、KeyPressイベントやTextChangedイベントでの条件を調整する必要があります。

以下のサンプルコードでは、小数点を含む数値の入力を許可しています。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 数字、小数点以外の入力を無効にする
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
    {
        e.Handled = true; // 入力を無効にする
    }
    // 小数点が既に入力されている場合、再度の入力を無効にする
    if (e.KeyChar == '.' && textBox1.Text.Contains("."))
    {
        e.Handled = true; // 入力を無効にする
    }
}

このコードを実行すると、ユーザーは小数点を含む数値を入力できるようになります。

負の数の入力を許可する

負の数を入力可能にするためには、マイナス記号の入力を許可する必要があります。

以下のサンプルコードでは、負の数の入力を許可しています。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // 数字、小数点、マイナス記号以外の入力を無効にする
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
        e.KeyChar != '.' && e.KeyChar != '-')
    {
        e.Handled = true; // 入力を無効にする
    }
    // マイナス記号は最初の位置にのみ許可
    if (e.KeyChar == '-' && textBox1.Text.Length > 0)
    {
        e.Handled = true; // 入力を無効にする
    }
    // 小数点が既に入力されている場合、再度の入力を無効にする
    if (e.KeyChar == '.' && textBox1.Text.Contains("."))
    {
        e.Handled = true; // 入力を無効にする
    }
}

このコードを実行すると、ユーザーは負の数を含む小数点数を入力できるようになります。

特定の範囲内の数値のみを許可する

特定の範囲内の数値のみを許可するためには、TextChangedイベントを使用して、入力された数値が範囲内かどうかをチェックします。

以下のサンプルコードでは、1から100までの範囲内の数値のみを許可しています。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    // 数値が範囲内かどうかをチェック
    if (double.TryParse(textBox1.Text, out double value))
    {
        if (value < 1 || value > 100)
        {
            // 範囲外の場合、最後の文字を削除
            textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
            textBox1.SelectionStart = textBox1.Text.Length; // カーソルを最後に移動
        }
    }
}

このコードを実行すると、ユーザーは1から100の範囲内の数値のみを入力できるようになります。

範囲外の数値が入力された場合は、自動的に削除されます。

よくある質問

KeyPressイベントとTextChangedイベントの違いは?

KeyPressイベントとTextChangedイベントは、どちらもTextBoxの入力に関連していますが、以下のような違いがあります。

  • KeyPressイベント:
  • ユーザーがキーを押したときに発生します。
  • 特定のキー入力をリアルタイムで制御できるため、入力を防ぐことが可能です。
  • 入力が行われる前に処理が行われるため、無効な入力を即座に防ぐことができます。
  • TextChangedイベント:
  • TextBoxの内容が変更されたときに発生します。
  • 入力後の内容をチェックするために使用され、無効な入力があった場合に修正することができます。
  • すでに入力された内容に対して処理を行うため、リアルタイムでの制御はできません。

MaskedTextBoxはどのような場合に適していますか?

MaskedTextBoxは、特定の形式の入力を強制したい場合に適しています。

以下のようなシナリオでの使用が考えられます。

  • 電話番号や郵便番号の入力:
  • 特定の桁数や形式が必要な場合に、ユーザーが正しい形式で入力することを促すことができます。
  • 日付や時間の入力:
  • 日付や時間の形式を強制することで、誤った入力を防ぐことができます。
  • 数値の桁数制限:
  • 数値の桁数を制限したい場合に、MaskedTextBoxを使用することで、ユーザーが指定された桁数内で入力することを強制できます。

ただし、柔軟性に欠けるため、特定の条件(小数点や負の数など)を許可する場合には、他の方法と組み合わせる必要があります。

数値以外の入力を完全に防ぐことは可能ですか?

数値以外の入力を完全に防ぐことは、KeyPressイベントやTextChangedイベントを適切に使用することで可能です。

以下の方法で実現できます。

  • KeyPressイベントを使用:
  • 数字以外のキー入力を無効にすることで、リアルタイムで不正な入力を防ぐことができます。
  • 例:if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; }
  • TextChangedイベントを使用:
  • 入力後に内容をチェックし、不正な文字が含まれている場合は削除することができます。
  • 例:if (!Regex.IsMatch(textBox1.Text, @"^\d*$")) { textBox1.Text = ""; }

これらの方法を組み合わせることで、数値以外の入力を効果的に防ぐことができます。

ただし、ユーザーが意図しない操作を行った場合に、どのようにフィードバックを提供するかも考慮する必要があります。

まとめ

この記事では、C#のWindowsフォームにおいてTextBoxで数値のみを入力可能にする方法について詳しく解説しました。

具体的には、KeyPressイベントやTextChangedイベントを利用した実装方法、さらにMaskedTextBoxを用いたアプローチを紹介しました。

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

ぜひ、実際のプロジェクトにこれらの方法を取り入れて、ユーザーエクスペリエンスを向上させてみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

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