-1

ユーザーがイベントを使用してコントロールfloatに何かを入力したときに値を検証する関数を実装しようとしています。TextBoxKeyPress

これは私が試したことです:

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ですか? (「バグ」なし)。

4

2 に答える 2

1

使用する

if (e.KeyChar=='.' && (obj.Text.IndexOf('.')>0 || obj.Text.Length==0))

「先頭の小数」をキャッチします。

于 2013-03-15T22:41:17.673 に答える
1

テキストボックスのテキストを単純に解析してみませんか (必要に応じて、数値のスタイルと形式を指定できます)。

private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
    TextBox textbox = (TextBox)sender;
    float value;
    if (float.TryParse(textbox.Text, out value))
        // input is valid
}

この float 値の検証にはバグがないと信じています。

于 2013-03-15T22:41:28.047 に答える