将 TextBox
控件(或 .NET 3.5 标准附带的任何其他内容)的输入限制为 float 的最优雅方法是什么?
目前,我正在通过继承 TextBox
并覆盖 OnKeyPress
来完成所有繁重的工作。但是,我不禁怀疑我是不是在重新发明轮子。
最佳答案
如果您按照建议的路线行事,请不要忘记您将面临的以下问题/极端情况:
- 用户可以使用 Ctrl-V 或 Shift-Insert 将“无效”值粘贴到(那第二个有点难以捕捉)......但用户可能应该被允许将合法值粘贴到控件中
- 用户可以右键单击,使用默认上下文菜单粘贴无效值
- 即使您已尝试通过为文本框提供自己的上下文菜单来解决上一个问题,用户也可以在您的控制范围之外右键单击,按住右键,拖过您的文本框并松开以访问默认上下文-menu(并粘贴无效值)
- 无论您执行何种键处理,都不应该禁用组合键,如 Alt - F4 等(是的,如果您设置
SuppressKeyPress,您将破坏它
对于所有非有效数字) - 用户应该能够输入部分值(例如
"-."
,因为他们开始键入"-.23"
),而不会受到文本框的惩罚 - 像
"-.1e-2"
这样的数字可以被认为是合法的 - 用户可以输入一个仅包含数字的值,但会溢出
float
- 最糟糕的一个:您的用户在您发货后会发现一些其他神秘的角落案例 (!!)
道德?执行您的建议可能非常棘手。
您可能想要组合执行以下操作:
- 使用了解所有极端情况的人构建的控件(如 Microsoft)
- 在
TextChanged
事件中进行基本验证(并做一些被动的事情,比如更改文本框背景颜色) - 保存验证,直到您实际尝试使用他们输入的值
- 使用系统库为你
解析
用户的值
关于c# - 在 C# 中对 TextBox 实现输入限制的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617062/