有谁知道为什么 Microsoft 不随其 .NET 框架提供数字文本框,例如一个可以确保输入的字符始终是有效数字的文本框?它是不同风格的应用程序中常用的东西,而且实际上大多数 GUI 库(嗯,我知道的那些)都以某种方式提供。虽然不是 自己编写很难,也不是微不足道的。

因此,我很想知道是否有人可以合理解释这一遗漏。

编辑:感谢您的建议。虽然屏蔽文本框和数字上下键有其一席之地;我对一个看起来像文本框的控件感兴趣,但会在按键时自动执行验证,以确保输入对应于有效数字。根据我(诚然有限)的经验,这是经常使用的东西(我们并不总是希望蒙版文本框施加的静态约束,就像我们并不总是希望侧面的上下控件一样) 。

网上有很多不同程度质量的实现,实际上甚至在 微软软件定义网络.

编辑2:谢谢大家,所以听起来数字上下是仅用于数字输入的 .NET 控件(这也是我们实际上没有明确的数字文本框控件的原因)。如果它自动禁止输入非数字字符(在按键时、粘贴时等),那就太好了,但我想它在控件失去焦点时执行验证就足够了。而且,如果有人真的热衷的话,可以在按键时进行粘贴验证......

有帮助吗?

解决方案

我赞同 Garry Shutlers 使用 NumericUpDown 的建议。您可能不喜欢上下控件,但是 Windows 中数字输入控件的标准外观,在使用不同的外观时应三思而后行。

如果您最终编写自己的实现(或在网络上找到一个实现),则需要注意一些陷阱。请记住,除了按键之外,还有很多方法可以将值输入到控件中。MSDN 上的链接中的链接甚至不会覆盖粘贴,因此您可以轻松地将非数字字符串 ctrl-V 插入控件中。

其他提示

你可以使用 蒙版文本框

有的是 数字上下 专门用于数字输入的控件,可以像文本框一样使用。

从 WinForms 2.0 开始,您有一个 MaskedTextBox。您可以将掩码设置为您想要的任何内容,即对于数字,请使用全 0 掩码。

奇怪的是,某些 .NET Framework 控件并未公开它们所包装的底层 Windows 控件的所有功能。在这种情况下,由于某种原因 ES_NUMBER 样式尚未实施。

您可以处理 HandleCreated 事件(或覆盖 OnHandleCreated,因为 TextBox 未密封)并调用 设置窗口长度 设置 ES_NUMBER 基础编辑控件上的样式。 ES_NUMBER 在 WinUser.h 中定义为 0x2000。

您还可以派生 TextBox 类并捕获键盘事件,并确保只写入数字。

如果它是一个网页,则使用 Javascript 对 html 文本框执行相同的操作。

微软将其留给第三方来填补工具箱中缺少控件的空白。我想时间和成本会成为他们的理由。

然而,在这种情况下,我认为 过滤文本框 提供您所描述的功能。

基于第二次编辑:

Windows 窗体常见问题解答 告诉您如何限制相关文本框中的字符 26.12:

26.12 如何限制我的文本框可以接受的字符?

您可以处理文本框的 KeyPress 事件,如果传入的字符不可接受,请将事件参数标记为显示该字符已被处理。下面是一个派生的 TextBox,它只接受数字(以及控制字符,例如退格键,...)。尽管代码片段使用派生文本框,但这并不是必需的,因为您只需将处理程序添加到其父窗体即可。

请参阅常见问题解答以获取代码示例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top