限制TextBox
控件(或.NET 3.5标准的任何其他内容)输入到浮点数的最优雅方法是什么?
目前,我正在通过继承TextBox
和重写来完成所有繁重的工作OnKeyPress
.但是,我不禁想知道我是否正在重新发明轮子.
如果您沿着建议的路线走,请不要忘记以下问题/角落情况:
用户可以使用Ctrl- V或Shift- Insert粘贴"无效"值(第二个值有点棘手)...但是可能应该允许用户将合法值粘贴到控件中
用户可以使用默认上下文菜单右键单击,粘贴无效值
即使您已尝试通过为文本框提供其自己的上下文菜单来修复上一个问题,用户也可以右键单击控件外部,按住右键,拖动文本框,然后转到访问默认上下文菜单(并粘贴无效值)
无论你做什么关键处理都不应该禁用像Alt- F4等等的组合键.(是的,如果设置SuppressKeyPress
的是非有效数字的所有内容,你就会破坏它)
用户应该能够输入部分值(例如"-."
,当他们开始输入时"-.23"
),而不会对文本框进行惩罚
数字"-.1e-2"
可以被认为是合法的
用户可以可行地输入仅包含数字但是会溢出数字的值 float
最糟糕的一个: 你的用户发货后会发现的其他一些神秘的角落案例(!!)
道德?做你所建议的事情可能会非常棘手.
您可能要么想要组合以下内容:
使用控件,知道所有角落案例的人(如微软)
在TextChanged
事件中进行基本验证(并做一些被动的事情,比如更改文本框背景颜色)
保存验证,直到您实际尝试使用他们输入的值
将系统库用于Parse
用户的值