在KeyPress事件中验证浮点值

时间:2013-03-15 22:34:37

标签: c# .net winforms validation keypress

我正在尝试实现一个函数,以便在用户使用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

观察:

数字中已有一个点作为小数点分隔符。因此,当尝试再次按下点键以放置另一个时,验证工作正常。


第二种情况:用户输入的值如 .. 20.5

观察:

第一个数字不能是数值中的点。此外,还有多个点,验证不起作用。


所以,我的问题是......

如何修复上述代码以便对float值进行非常好的验证?(没有“错误”)。

2 个答案:

答案 0 :(得分:1)

使用

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

捕捉'前导小数'。

答案 1 :(得分: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
}

我相信浮动值的验证没有错误。