- ベストアンサー
C#でTextBoxに数値のみ入力可能とする方法
C#の超初心者です。C#.NETでWindows環境下でプログラム開発を行っています。TextBoxで数値のみ入力可能にする方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if(!('0' <= e.KeyChar && e.KeyChar <= '9')) e.Handled=true; } keyPressイベントで Handled に true を設定すれば、キャンセルできます。 小数点のチェックを入れる場合は、チェックをもう少し考えないといけません
その他の回答 (3)
- hpp
- ベストアンサー率64% (22/34)
すみません。ボケてましたね。 textBox1.Text.Replace(e.KeyChar,'') 空のリテラルでコンパイルさえ通らないですね。それにKeyPressイベントの段階ではまだtextBox1.Textの内容は古いままで書き換わってませんね。 普段私は正規表現とデータベース更新時にまとめて入力項目をチェックしますので、思い込みでKeyPressイベントについて考察してしまいました。 以後、動作確認、もしくは動作確認できなければそれを明記するように気をつけたいと思います。お恥ずかしい限りです。
お礼
ご意見、参考にさせていただきました。ありがとうございました。
- hpp
- ベストアンサー率64% (22/34)
keypressイベントでチェックし、入力された1文字を消すということは可能です。e.KeyCharをチェックし、違反していれば、 textBox1.Text.Replace(e.KeyChar,'') みたいな感じで良いでしょう。しかし、貼り付けされることもあります。 なので、Leaveイベントでチェックするか、データ更新など何らかアクションを起こしたときに、errorProviderを使ってまとめてチェックした方が堅いと思います。もっとも両イベントでチェックしても良いとは思います。
- hpp
- ベストアンサー率64% (22/34)
特にプロパティには用意されていないようなので、 using System.Text.RegularExpressions; Regex regex09 = new Regex("^[0-9]+$"); if (regex09.IsMatch(texBox1.Text) { } といった具合に正規表現で判断すれば良いでしょう。
補足
ありがとうございます。正規表現に違反している場合はキー入力をキャンセルしたいのですが、どうしたらよろしいのでしょうか?KeyPressイベントは使えますか?
お礼
ありがとうございました。小数点とエンターキーの判定も追加できました。