c# - 在 C# 中对 TextBox 实现输入限制的最佳方法是什么?

标签 c# winforms

TextBox 控件(或 .NET 3.5 标准附带的任何其他内容)的输入限制为 float 的最优雅方法是什么?

目前,我正在通过继承 TextBox 并覆盖 OnKeyPress 来完成所有繁重的工作。但是,我不禁怀疑我是不是在重新发明轮子。

最佳答案

如果您按照建议的路线行事,请不要忘记您将面临的以下问题/极端情况:

  • 用户可以使用 Ctrl-VShift-Insert 将“无效”值粘贴到(那第二个有点难以捕捉)......但用户可能应该被允许将合法值粘贴到控件中
  • 用户可以右键单击,使用默认上下文菜单粘贴无效值
  • 即使您已尝试通过为文本框提供自己的上下文菜单来解决上一个问题,用户也可以在您的控制范围之外右键单击,按住右键,拖过您的文本框并松开以访问默认上下文-menu(并粘贴无效值)
  • 无论您执行何种键处理,都不应该禁用组合键,如 Alt - F4 等(是的,如果您设置 SuppressKeyPress,您将破坏它 对于所有非有效数字)
  • 用户应该能够输入部分值(例如 "-.",因为他们开始键入 "-.23"),而不会受到文本框的惩罚
  • "-.1e-2" 这样的数字可以被认为是合法的
  • 用户可以输入一个仅包含数字的值,但会溢出 float
  • 最糟糕的一个:您的用户在您发货后会发现一些其他神秘的角落案例 (!!)

道德?执行您的建议可能非常棘手。

您可能想要组合执行以下操作:

  • 使用了解所有极端情况的人构建的控件(如 Microsoft)
  • TextChanged 事件中进行基本验证(并做一些被动的事情,比如更改文本框背景颜色)
  • 保存验证,直到您实际尝试使用他们输入的值
  • 使用系统库为你解析用户的值

关于c# - 在 C# 中对 TextBox 实现输入限制的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617062/

相关文章:

c# - LoginAsync 缺失

javascript - 取消输入时提交

c# - 通过 GitHub 将 MVC4 C# 应用程序部署到 Azure。我的 .gitignore 中应该包含什么?

c# - 如何检测窗口在现代多显示器系统上是否可见

c# - 如何删除 MenuStrip 控件下绘制的白线?

c# - Javascript block 内的 ASP MVC Razor foreach

c# - ASP Core 2 空 POST 请求

c# - 使用 Visual C# 在多个 Windows 窗体应用程序中形成关闭事件

c# - 带有设计器的部分嵌套 Form 类

c# - 如何解决winform控件的本地语言文本编码问题