【问题标题】:Validate float value in KeyPress event在 KeyPress 事件中验证浮点值
【发布时间】:2013-03-15 22:34:36
【问题描述】:

当用户使用KeyPress 事件在TextBox 控件中键入内容时,我正在尝试实现一个函数来验证float 值。

这是我尝试过的:

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 值进行真正良好的验证?(没有“错误”)。

【问题讨论】:

    标签: c# .net winforms validation keypress


    【解决方案1】:

    使用

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

    捕捉'前导小数'。

    【讨论】:

      【解决方案2】:

      为什么不简单地尝试解析文本框的文本(如果需要,您可以提供数字样式和格式)?

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-17
        • 2015-07-14
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 2013-10-29
        • 2020-07-23
        相关资源
        最近更新 更多