MENU

C# テキストボックスを数値のみ入力に制限する方法

C#でWindowsフォームアプリケーションを開発する際、ユーザーからの入力を特定の形式に制限したい場合があります。特に、テキストボックスに数値のみを入力させたいというケースは非常に一般的です。この記事では、C#を使用してテキストボックスを数値のみ入力に制限する方法を、初心者にも分かりやすく解説します。

目次

テキストボックスを数値のみ入力に制限する基本的な方法

テキストボックスを数値のみの入力に制限するには、主にKeyPressイベントを使用します。このイベントは、ユーザーがキーを押すたびに発生し、入力される文字を制御することができます。以下に、基本的な実装方法を示します。

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // テキストボックスのKeyPressイベントにイベントハンドラを追加
        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メソッドを登録します。
  2. TextBox1_KeyPressメソッド内で、入力された文字(e.KeyChar)をチェックします。
  3. char.IsDigit()メソッドを使用して、入力が数字かどうかを判定します。
  4. バックスペースキー((char)Keys.Back)も許可します。これにより、ユーザーが入力を訂正できるようになります。
  5. 数字でもバックスペースでもない場合、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;
    }
}

このコードでは、以下の点に注意してください:

  1. 小数点(’.’)も許可文字に追加しています。
  2. 小数点が入力された場合、既にテキストボックス内に小数点が存在するかチェックします。
  3. 2つ目の小数点の入力は許可しません。

まとめ

テキストボックスを数値のみ入力に制限する方法として、KeyPressイベントを使用する方法を紹介しました。この方法には以下のような利点があります:

  1. 簡単に実装できる:数行のコードで実現可能です。
  2. リアルタイムで制御できる:ユーザーが入力する瞬間に制御が行われます。
  3. カスタマイズが容易:必要に応じて、許可する文字や条件を柔軟に変更できます。

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

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

コメント

コメントする

目次