テキストボックスに禁止文字を設定して、入力されてもテキストボックスに入力を反映させないようにする

実現したいこと

テキストボックスに、±を含むfloat型の数値のみを入力可としたいです。

前提

Visual Studio Professional 2022(Version 17.7.2)、.NET Framework(Version 4.8.09032)を使用して、テキストボックスなどを使用した機械操作用インターフェースアプリを開発しています。その画面内でユーザが、各種条件を入力するためのテキストボックスに入力ミス防止機能を付属させることが目的です。

発生している問題・エラーメッセージ

IMEModeプロパティはDisableなので、日本語入力はできないようにしています。また、アルファベットなどの文字入力はKeyPressイベントに禁止文字入力を阻止するメソッドを追加することで達成できています。
しかし、float型変数になり得ない状況が防げません。
(例:45.1.5 ← 小数点が2つ存在する。12-3.456 ← マイナス符号の位置が不正)

該当のソースコード

C#

1 private void KeyPressCheck(object sender, KeyPressEventArgs e)2 {3 if (e.KeyChar != '.'& e.KeyChar != '\b' & e.KeyChar!='-')4 {5 if (e.KeyChar < '0' || e.KeyChar > '9')6 {7 //var sample = e.KeyChar;8 e.Handled = true;9 }10 }11 if (float.TryParse(Txt1.Text.ToString(), out float fval) == false) e.Handled = true;12 }13

試したこと

最初に試した、Maskedtextboxのマスク機能は入力時に桁の指定までされてしまうため、使いづらいと社内の評価会で却下されてしまいました。
次に、KeyPressイベントにて
if (float.TryParse(Txt1.Text.ToString(), out float fval) == false)e.Handled = true;
を仕込んで試したのですが、不正な入力ができてしまう上にDeleteキー以外での修正も効かなくなってしまいます。どのようにしたら、数値として認識できない入力をテキストボックスに反映させずに阻止できるか、お知恵を貸してください。

補足情報(FW/ツールのバージョンなど)

Visual Studio Professional 2022(Version 17.7.2)
.NET Framework(Version 4.8.09032)

コメントを投稿

0 コメント