将TextBox
控件(或.NET 3.5标准的任何其他内容)的输入限制为浮点数的最优雅方法是什么?
目前,我正在通过继承TextBox
并覆盖OnKeyPress
来完成所有繁重工作。但是,我不禁想知道我是否正在重新发明轮子。
答案 0 :(得分:13)
如果您沿着建议的路线前进,请不要忘记以下问题/角落:
SuppressKeyPress
,因为他们开始输入"-."
),而文本框不会惩罚他们"-.23"
之类的数字可视为合法"-.1e-2"
道德?做你想要的事情可能会非常棘手。
您可能想要组合以下内容:
float
事件中进行基本验证(并执行被动操作,例如更改文本框背景颜色)TextChanged
用户的价值答案 1 :(得分:2)
查看MaskedTextBox控件。它还继承自TextBoxBase,并且可能具有您构建的功能。
答案 2 :(得分:1)
使用NumericUpDown怎么样?
答案 3 :(得分:0)
我认为车轮尚未发明(至少在.NET框架中)。我确信在CodeProject之类的东西上有类似于你的东西,所以它可能值得谷歌。
尽管如此,举重不应该太糟糕。乍一看还有一点点。
过于简化的示例是您可以处理OnKeyPress
,使用附加的新字符执行Float.TryParse
。如果为true,请保持按键;如果为false,则取消它(e.Handled = true
)。
如果他们删除,剪切或粘贴选择,那么困难的部分就是这样。另一件事是当他们刚开始时(你可能想接受“ - ”作为部分有效输入)......
答案 4 :(得分:0)
或使用
检查匹配void TextBox_KeyUp(object sender, KeyEventArgs e)
{
if(..) // your condition
{
e.SuppressKeyPress = false;
}
else
{
e.SuppressKeyPress = true;
}
}
或
void TextBox_KeyUp(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = CheckInput(e.KeyValue); // where CheckInput is boolean method
}
答案 5 :(得分:0)
我发现了maskedTextBox的ValidatingType属性:
maskedTextBox1.ValidatingType = typeof(System.Double);
确实告诉你它是否有效。不幸的是,它似乎只是在焦点变化时进行验证(即使那时它实际上没有做任何事情);但也许有一些方法可以使用它。
答案 6 :(得分:0)
是否有必要在数据输入期间进行验证,或者您是否能够在焦点丢失后检查输入的最终值?
如果是后者,您还可以使用ErrorProvider控件来帮助限制功能,直到输入得到解决。