ここから本文です

C# TextBox への入力制限を整数と少数に分けそれぞれに桁制限を設けたいです。 例...

god********さん

2019/1/716:16:05

C# TextBox への入力制限を整数と少数に分けそれぞれに桁制限を設けたいです。
例としては 0.0 ~9.9 や 0.1~99.9 などです。

小数点付きの整数以外を排除する方法は検索でヒットしたのですがこれが上手く行きません。
入力した値を0.1で割って処理したりしようとしましたが型が合わない?などではじかれます。

何卒よろしくお願い致します。


今のプログラムは下記です。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{

double work;

try
{
//バックスペースと小数点使用可能とする
if (e.KeyChar == 0x08 || e.KeyChar == '.') { return; }
//数字キー以外の入力をキャンセルする
if (e.KeyChar < 0x30 || e.KeyChar > 0x39) { e.Handled = true; }
}
catch (Exception ex) { Console.Error.WriteLine(ex);}

work = Convert.ToDouble(textBox1.Text); ←これがダメだと言われます。
work = Convert.ToDouble(work) / 0.1;
textBox1.Text = Convert.ToString(work / 10);

}

補足すみません。そもそも0.1で割って10かけても元に戻るだけですね。マイコンの組み込みでよくやる切り捨ての方法と何かがごちゃごちゃになってました。できれば後付けの方法でなくて純粋に入力の制限みたいな方法があるのであれば知りたいです。

閲覧数:
34
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

roc********さん

2019/1/717:14:16

エラーになってるのは、textBox1.Textに「まだ何も入ってない」からではないですかね?

ダメだと言われる行の前にこれ(未入力なら何もしない)を追加します
if(textBox1.Text == "")return;

ただ、KeyPressイベントが起きた時点では、まだtextBox1.Textには入力文字は反映されてないですよ(TextBox.Textに反映する前にハジくのがKeyPressの役目なので)

実際に入力文字がtextBox1.Textに入ったときに発生するイベントはTextChangedなので、catchより後ろの処理はtextBox1_TextChangedに書いた方が良いです

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/1/8 11:23:47

ありがとうございました。いろいろと参考になりました。textBox1_TextChangedだと0.とか入れた時点で演算が始まってダメだったり、Form2のクリックイベントに変えてもなんだか格好悪いしまだまだ検討が必要のようです。もう少し勉強してみます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる