- ベストアンサー
C#でテキストボックスの入力を制限と桁区切りする方法
- C#のテキストボックスに数値のみを入力させる方法と、3桁ごとにコンマ区切りで表示する方法についてご質問です。
- 入力制限については、KeyPressイベントを使用して入力文字が数値かどうかを判別し、そうでない場合は入力を無効化するようにします。
- また、桁区切り表示については、テキストボックスのLeaveイベントを使用して文字列をパースしてコンマ区切りの形式に変換します。ただし、一部の操作でエラーが発生する可能性があるため、それを防ぐ方法についても考える必要があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Parseメソッドの NumberStyles付に変更すればいいですよ this.textBox1.Text = string.Format("{0,#0}",ulong.Parse(this.textBox1.Text, System.Globalization.NumberStyle.Number)); といった具合です Windowsの桁区切りが『,』であれば 上記でうまくいくと思います
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
#3です 私の回答のFormatの書式を間違えてますね … 正しくは質問の通り "{0:#,0}" です
お礼
空欄の件ですが、if文で分ければ簡単に解決できました。 private void textBox1_Leave(object sender, EventArgs e) { if(this.textBox1=="";) { } else { this.textBox1.Text = string.Format("{0:#,0}", ulong.Parse(this.textBox1.Text)); } } こういった感じで。 解決できました。本当にありがとうございました。
- Wr5
- ベストアンサー率53% (2173/4061)
Replaceメソッド辺りで取り除く…ってところでしょうかね? http://msdn.microsoft.com/ja-jp/library/czx8s9ts%28v=vs.110%29.aspx Removeメソッドの方がソレっぽいのですが、こちらはインデックスとか使いますし。 # まぁ、演算すりゃいいだけですが。 ところで…this.textBox1.Textが空になった時のコトも考慮しておいた方がいいでしょうね。 # 上記のReplaceメソッドで取り除いた後の長さも…かな。"1,000"かせ取り除いても空にはなりませんが。
お礼
ご回答ありがとうございました。やり方は、No.3さんの方法でうまくいきました。ただこの場合も空欄の場合の処理を考えなければなりません。 考えてみます。
- wormhole
- ベストアンサー率28% (1626/5665)
テキストボックスに書かれてる文字列をそのままパースしようとするからエラーになるわけで、カンマを取り除いてパースすればいいのでは。
お礼
ご回答ありがとうございました。取り除いてからという方法も確かにありそうですね。しかし、No.3さんのご回答でうまくいきました。
お礼
ご回答ありがとうございました。すごいです、思っていた通りになりました。あとは空欄の場合の処理ですね。考えてみようと思います。