1. ホーム
  2. c#

[解決済み] 数字しか入力できないテキストボックスの作り方を教えてください。

2022-03-15 03:21:10

質問

Windowsフォームアプリで、整数値しか受け付けないテキストボックス・コントロールがあります。過去には、KeyPressイベントをオーバーロードして、仕様に合わない文字を削除することで、この種の検証を行ったことがあります。MaskedTextBoxコントロールを見ましたが、おそらく正規表現で動作する、または他のコントロールの値に依存する、より一般的なソリューションを希望しています。

理想的には、数字以外の文字を押しても結果が出ないか、無効な文字に関するフィードバックをすぐにユーザーに提供するような動作が望ましいです。

解決方法は?

2つの選択肢があります。

  1. を使用します。 NumericUpDown の代わりに NumericUpDownはフィルタリングをやってくれるのがいいところです。もちろん、キーボードの上下の矢印を押して、現在の値を増やしたり減らしたりすることもできる。

  2. 適切なキーボードイベントを処理し、数字以外の入力ができないようにします。私は、標準的なテキストボックスで、この2つのイベントハンドラを使用して成功したことがあります。

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
            (e.KeyChar != '.'))
        {
                e.Handled = true;
        }
    
        // only allow one decimal point
        if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
        {
            e.Handled = true;
        }
    }
    
    

のチェックを外すことができます。 '.' (そして、それに続く複数の '.' のように、小数点以下の桁数を許容しないテキストボックスの場合。に対するチェックを追加することもできます。 '-' は、テキストボックスが負の値を許可する必要がある場合

桁数を制限したい場合は、以下のようにします。 textBox1.MaxLength = 2; // this will allow the user to enter only 2 digits