我正在尝试实现一个函数,以便在用户使用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
值进行非常好的验证?(没有“错误”)。
答案 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
}
我相信浮动值的验证没有错误。