※ ChatGPTを利用し、要約された質問です(原文:C#で、テキストボックスの入力について。)
C#でテキストボックスの入力を制限と桁区切りする方法
このQ&Aのポイント
C#のテキストボックスに数値のみを入力させる方法と、3桁ごとにコンマ区切りで表示する方法についてご質問です。
入力制限については、KeyPressイベントを使用して入力文字が数値かどうかを判別し、そうでない場合は入力を無効化するようにします。
また、桁区切り表示については、テキストボックスのLeaveイベントを使用して文字列をパースしてコンマ区切りの形式に変換します。ただし、一部の操作でエラーが発生する可能性があるため、それを防ぐ方法についても考える必要があります。
テキストボックスに数値しか入力させないようにし、さらにそれを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));
}
上の方では数値のみの入力制限、下の方では桁区切りを実行しています。
これでうまくいくのですが、エラーが一つ出ます。
一度数字を入力し、リーブしたらもう桁区切りがなされます。
しかしそれを書き換える、例えば全部消してから書き換えるのでなく、桁数が一文字多かったので消そうというときに、一つ消してリーブすると、コンマが入っているためにエラーになります。
これを防ぐにはどうすればいいでしょうか?
また、ただそれだけでは、桁区切りがおかしくなるはずです。
できれば書き換えた後に、新たに桁区切りがなされるようにしたいのですがやはり難しいでしょうか?
お礼
ご回答ありがとうございました。すごいです、思っていた通りになりました。あとは空欄の場合の処理ですね。考えてみようと思います。