-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这样的数值

观察:

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


第二种情况:用户输入类似..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
}

我相信这种对浮点值的验证没有错误。

于 2013-03-15T22:41:28.047 回答