验证KeyPress事件中的浮点值

问题描述:

我试图实现一个函数来验证float值,当用户使用KeyPress事件在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价值的一个很好的验证?(没有“bug”)。

+0

为什么downvote?我认为这是一个有效的问题。 – 2013-03-16 22:13:44

使用

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

抓 '龙头小数'。

+0

这工作完美,谢谢! – 2013-03-18 15:40:41

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

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值的验证没有错误。