验证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”)。
答
使用
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值的验证没有错误。
为什么downvote?我认为这是一个有效的问题。 – 2013-03-16 22:13:44