ユーザーがイベントを使用してコントロールfloat
に何かを入力したときに値を検証する関数を実装しようとしています。TextBox
KeyPress
これは私が試したことです:
private void ValidateFloat(object sender, KeyPressEventArgs e)
{
int b;
if (e.KeyChar == (char)Keys.Back ||
e.KeyChar == (char)Keys.Delete ||
e.KeyChar == (char)Keys.Left ||
e.KeyChar == (char)Keys.Right ||
int.TryParse(e.KeyChar.ToString(), out b))
{
TextBox obj = sender as TextBox;
if (e.KeyChar == '.' && obj.Text.IndexOf('.') > 0)
e.Handled = true;
else
e.Handled = false;
}
else
e.Handled = true;
}
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
this.ValidateFloat(sender, e);
}
しかし、何らかの理由でこれは機能しているように見えますが、まったく機能していません。以下の説明を確認してください...
最初のケース:ユーザーが20.5のような数値を入力する
所見:
数値には、小数点の記号としてドットが既に含まれています。そのため、ドット キーをもう一度押して別のキーを入力しようとすると、検証が正常に機能します。
2 番目のケース:ユーザーは..20.5のような値を入力します
所見:
数値の最初の桁をドットにすることはできません。また、複数のドットがあり、検証がうまく機能しません。
それで、私の質問は...
値の本当に良い検証を得るために、上記のコードを修正するにはどうすればよいfloat
ですか? (「バグ」なし)。