[C#] TextBoxで数値と小数点のみを許可する方法

C#のTextBoxで数値と小数点のみを許可するには、TextBoxのKeyPressイベントを利用して入力を制限する方法があります。

このイベントで、ユーザーがキーを押したときに、そのキーが数値(0-9)または小数点(.)であるかを確認し、それ以外の入力を無効にします。

具体的には、KeyPressEventArgsHandledプロパティをtrueに設定することで、無効なキー入力をキャンセルできます。

また、複数の小数点が入力されないように、TextBoxの現在のテキストに既に小数点が含まれているかをチェックすることも重要です。

これにより、ユーザーが数値と小数点のみを入力できるようになります。

この記事でわかること
  • TextBoxで数値と小数点を制限する方法
  • 無効な入力の処理とフィードバック
  • 負の数や範囲制限の実装方法
  • カスタムフォーマットの適用方法
  • ユーザー入力の柔軟な制御方法

目次から探す

数値と小数点の入力制限

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

これにより、ユーザーが無効な入力を行うことを防ぎ、アプリケーションの信頼性を向上させることができます。

以下に、具体的な実装方法を示します。

数値の入力を許可する方法

数値の入力を許可するためには、TextBoxの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; // 無効な入力を無視
        }
    }
}

このコードでは、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.KeyChar != '.')
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

このコードでは、小数点.も許可されるように条件を追加しています。

これにより、ユーザーは数値と小数点を入力できるようになります。

複数の小数点を防ぐ方法

小数点が複数回入力されるのを防ぐためには、現在の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.IsDigit(e.KeyChar) && e.KeyChar != '.')
        {
            e.Handled = true; // 無効な入力を無視
        }
        // すでに小数点が含まれている場合は新たな小数点を無視
        if (e.KeyChar == '.' && textBox1.Text.Contains("."))
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

このコードでは、ユーザーが小数点を入力しようとした際に、すでにTextBoxに小数点が含まれているかを確認し、含まれている場合はその入力を無視します。

これにより、複数の小数点が入力されることを防ぎます。

エラーハンドリングとユーザー通知

ユーザーがTextBoxに無効な入力を行った場合、適切なエラーハンドリングとユーザーへのフィードバックが重要です。

これにより、ユーザーは何が問題であるかを理解し、正しい入力を行うことができます。

以下に、無効な入力の処理方法とユーザーへのフィードバック方法を解説します。

無効な入力の処理

無効な入力を処理するためには、KeyPressイベントだけでなく、Validatingイベントを使用することも有効です。

Validatingイベントは、TextBoxがフォーカスを失う際に発生し、入力内容の検証を行うことができます。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
        textBox1.Validating += new CancelEventHandler(textBox1_Validating);
    }
    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_Validating(object sender, CancelEventArgs e)
    {
        // 入力が無効な場合の処理
        if (!IsValidInput(textBox1.Text))
        {
            MessageBox.Show("無効な入力です。数値と小数点のみを入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            e.Cancel = true; // フォーカスを戻す
        }
    }
    private bool IsValidInput(string input)
    {
        // 入力が数値または小数点であるかを確認
        return double.TryParse(input, out _);
    }
}

このコードでは、Validatingイベントを使用して、TextBoxの内容が数値または小数点であるかを確認しています。

無効な入力があった場合は、エラーメッセージを表示し、フォーカスを戻すことで再入力を促します。

ユーザーへのフィードバック方法

ユーザーへのフィードバックは、エラーメッセージだけでなく、視覚的なヒントを提供することも重要です。

以下に、ユーザーへのフィードバック方法をいくつか示します。

スクロールできます
フィードバック方法説明
メッセージボックスエラーメッセージをポップアップ表示する。
テキストボックスの色変更無効な入力時に背景色を赤に変更する。
ツールチップ入力が無効な場合にヒントを表示する。

メッセージボックス

無効な入力があった場合に、メッセージボックスを表示することで、ユーザーにエラーを明確に伝えます。

上記のサンプルコードでも使用しています。

テキストボックスの色変更

無効な入力があった場合、TextBoxの背景色を赤に変更することで、視覚的にエラーを示すことができます。

以下のコードを追加することで実現できます。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (!IsValidInput(textBox1.Text))
    {
        textBox1.BackColor = Color.Red; // 背景色を赤に変更
        MessageBox.Show("無効な入力です。数値と小数点のみを入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
        e.Cancel = true; // フォーカスを戻す
    }
    else
    {
        textBox1.BackColor = Color.White; // 有効な入力時は背景色を元に戻す
    }
}

ツールチップ

ツールチップを使用して、ユーザーが無効な入力を行った際にヒントを表示することもできます。

以下のように、ToolTipクラスを使用して実装できます。

ToolTip toolTip = new ToolTip();
private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (!IsValidInput(textBox1.Text))
    {
        toolTip.Show("数値と小数点のみを入力してください。", textBox1, 0, -20, 2000); // ツールチップを表示
        e.Cancel = true; // フォーカスを戻す
    }
}

これにより、ユーザーは無効な入力を行った際に、即座にヒントを得ることができます。

応用例

数値と小数点の入力制限をさらに発展させるために、以下の応用例を紹介します。

これにより、ユーザーの入力をより柔軟に制御することができます。

負の数の入力を許可する方法

負の数の入力を許可するためには、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.KeyChar != '.' && e.KeyChar != '-')
        {
            e.Handled = true; // 無効な入力を無視
        }
        // すでに小数点が含まれている場合は新たな小数点を無視
        if (e.KeyChar == '.' && textBox1.Text.Contains("."))
        {
            e.Handled = true; // 無効な入力を無視
        }
        // マイナス記号は先頭にのみ許可
        if (e.KeyChar == '-' && textBox1.Text.Length > 0)
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

このコードでは、マイナス記号の入力を許可し、先頭以外にマイナス記号が入力されることを防いでいます。

数値範囲の制限を追加する方法

数値の範囲を制限するためには、Validatingイベントでのチェックを追加します。

以下のサンプルコードでは、入力された数値が特定の範囲内であるかを確認します。

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (!IsValidInput(textBox1.Text))
    {
        MessageBox.Show("無効な入力です。数値と小数点のみを入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
        e.Cancel = true; // フォーカスを戻す
    }
    else
    {
        double value;
        if (double.TryParse(textBox1.Text, out value))
        {
            // 数値範囲の制限
            if (value < 0 || value > 100)
            {
                MessageBox.Show("数値は0から100の範囲で入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                e.Cancel = true; // フォーカスを戻す
            }
        }
    }
}

このコードでは、入力された数値が0から100の範囲内であるかを確認し、範囲外の場合はエラーメッセージを表示します。

カスタムフォーマットの入力を許可する方法

特定のカスタムフォーマット(例えば、通貨形式やパーセント形式)を許可するためには、入力時にフォーマットを適用することができます。

以下のサンプルコードでは、通貨形式の入力を許可する方法を示します。

private void textBox1_Leave(object sender, EventArgs e)
{
    if (double.TryParse(textBox1.Text, out double value))
    {
        // 通貨形式にフォーマット
        textBox1.Text = value.ToString("C"); // Cは通貨形式
    }
}

このコードでは、TextBoxからフォーカスが外れた際に、入力された数値を通貨形式にフォーマットします。

これにより、ユーザーは数値を入力した後に自動的にフォーマットされた表示を確認できます。

これらの応用例を活用することで、ユーザーの入力をより柔軟に制御し、アプリケーションの使いやすさを向上させることができます。

よくある質問

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

はい、KeyPressイベント以外にも、TextBoxの入力を制限する方法はいくつかあります。

以下の方法が考えられます。

  • Validatingイベント: TextBoxがフォーカスを失う際に、入力内容を検証することができます。

無効な入力があった場合は、エラーメッセージを表示したり、フォーカスを戻したりすることが可能です。

  • TextChangedイベント: ユーザーがTextBoxの内容を変更するたびに発生します。

このイベントを利用して、リアルタイムで入力内容をチェックし、無効な文字を削除することができます。

  • MaskTextBox: 特定のフォーマットに従った入力を強制するためのコントロールです。

数値や小数点の入力を制限するためにカスタムマスクを設定することができます。

小数点の位置を制限することはできる?

はい、小数点の位置を制限することは可能です。

例えば、小数点が入力される位置を制御するために、以下のような条件を追加することができます。

  • 小数点は数値の後ろにのみ入力できるようにする。
  • 小数点の後に特定の桁数(例えば、2桁)までしか入力できないようにする。

以下は、小数点の位置を制限するためのサンプルコードです。

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; // 無効な入力を無視
    }
    // 小数点の後に2桁までしか入力できないようにする
    if (e.KeyChar == '.')
    {
        // 小数点の後の桁数を確認
        if (textBox1.Text.Split('.').Length > 1 && textBox1.Text.Split('.')[1].Length >= 2)
        {
            e.Handled = true; // 無効な入力を無視
        }
    }
}

他の入力制限と組み合わせることは可能?

はい、他の入力制限と組み合わせることは可能です。

例えば、数値と小数点の入力制限に加えて、特定の文字列やフォーマットを許可することができます。

以下のような組み合わせが考えられます。

  • 文字数制限: TextBoxの最大文字数を設定し、特定の文字数以上の入力を防ぐことができます。
  • 特定の文字列の禁止: 特定の文字列(例えば、”abc”など)を禁止するために、TextChangedイベントを使用してリアルタイムでチェックすることができます。
  • 他のコントロールとの連携: 複数のTextBoxや他の入力コントロールと連携し、入力内容に応じて動的に制限を変更することができます。

これにより、ユーザーの入力をより厳密に制御し、アプリケーションの信頼性を向上させることができます。

まとめ

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

数値の入力を制限するための基本的な手法から、負の数や特定の範囲の制限、さらにはカスタムフォーマットの適用方法まで、さまざまな応用例を紹介しました。

これらの技術を活用することで、ユーザーが正しい形式でデータを入力できるようにし、アプリケーションの信頼性を高めることが可能です。

ぜひ、実際のプロジェクトにこれらのテクニックを取り入れて、より使いやすいインターフェースを実現してみてください。

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

関連カテゴリーから探す

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