「平成」を感じるもの

テキストボックスに数値しか入力させないようにし、さらにそれを3桁のコンマ区切りで表示しています。
以下の文でやっています。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar < '0' || '9' < e.KeyChar) && e.KeyChar != '\b' )
{
e.Handled = true;
}

}

private void textBox1_Leave(object sender, EventArgs e)
{
this.textBox1.Text = string.Format("{0:#,0}", ulong.Parse(this.textBox1.Text));
}

上の方では数値のみの入力制限、下の方では桁区切りを実行しています。
これでうまくいくのですが、エラーが一つ出ます。

一度数字を入力し、リーブしたらもう桁区切りがなされます。
しかしそれを書き換える、例えば全部消してから書き換えるのでなく、桁数が一文字多かったので消そうというときに、一つ消してリーブすると、コンマが入っているためにエラーになります。
これを防ぐにはどうすればいいでしょうか?
また、ただそれだけでは、桁区切りがおかしくなるはずです。
できれば書き換えた後に、新たに桁区切りがなされるようにしたいのですがやはり難しいでしょうか?

A 回答 (4件)

Parseメソッドの NumberStyles付に変更すればいいですよ



this.textBox1.Text = string.Format("{0,#0}",ulong.Parse(this.textBox1.Text, System.Globalization.NumberStyle.Number));

といった具合です

Windowsの桁区切りが『,』であれば 上記でうまくいくと思います
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。すごいです、思っていた通りになりました。あとは空欄の場合の処理ですね。考えてみようと思います。

お礼日時:2014/11/13 16:30

#3です



私の回答のFormatの書式を間違えてますね …

正しくは質問の通り "{0:#,0}" です
    • good
    • 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));
}
}

こういった感じで。

解決できました。本当にありがとうございました。

お礼日時:2014/11/13 17:52

Replaceメソッド辺りで取り除く…ってところでしょうかね?


http://msdn.microsoft.com/ja-jp/library/czx8s9ts …

Removeメソッドの方がソレっぽいのですが、こちらはインデックスとか使いますし。
# まぁ、演算すりゃいいだけですが。

ところで…this.textBox1.Textが空になった時のコトも考慮しておいた方がいいでしょうね。
# 上記のReplaceメソッドで取り除いた後の長さも…かな。"1,000"かせ取り除いても空にはなりませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。やり方は、No.3さんの方法でうまくいきました。ただこの場合も空欄の場合の処理を考えなければなりません。
考えてみます。

お礼日時:2014/11/13 16:32

テキストボックスに書かれてる文字列をそのままパースしようとするからエラーになるわけで、カンマを取り除いてパースすればいいのでは。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。取り除いてからという方法も確かにありそうですね。しかし、No.3さんのご回答でうまくいきました。

お礼日時:2014/11/13 16:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報