MENU

C# TextBoxに数字しか入力できないようにする

Windowsフォームアプリケーションやデスクトップアプリの開発において、ユーザーからの入力を制御することは非常に重要です。特に、数値のみを入力させたい場合、TextBoxに数字以外の文字が入力されないようにする必要があります。この記事では、C#を使用してTextBoxに数字のみを入力可能にする方法を、初心者にも分かりやすく解説します。

目次

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

TextBoxに数字のみを入力可能にするには、主に以下の2つのアプローチがあります:

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

ここでは、より直感的で理解しやすいKeyPressイベントを使用する方法を紹介します。

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        
        // TextBoxのKeyPressイベントにイベントハンドラを追加
        textBox1.KeyPress += TextBox1_KeyPress;
    }

    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 入力された文字が数字でない場合は、イベントをキャンセルする
        if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b')
        {
            e.Handled = true;
        }
    }
}

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

  1. TextBoxのKeyPressイベントにイベントハンドラ(TextBox1_KeyPress)を追加します。
  2. イベントハンドラ内で、入力された文字(e.KeyChar)が数字かどうかをチェックします。
  3. char.IsDigit()メソッドを使用して、文字が数字かどうかを判定します。
  4. バックスペースキー(’\b’)も許可します。これにより、ユーザーが入力を訂正できるようになります。
  5. 入力された文字が数字でもバックスペースでもない場合、e.Handled = true; を設定してイベントをキャンセルし、文字の入力を防ぎます。

より高度な制御:小数点の入力を許可する

場合によっては、整数だけでなく小数点を含む数値の入力も許可したい場合があります。以下のコードは、小数点の入力も許可する例です。

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

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

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

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

まとめ

TextBoxに数字のみを入力可能にする方法として、KeyPressイベントを使用する方法を紹介しました。この方法の利点は以下の通りです:

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

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

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

コメント

コメントする

目次