0

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

所以,我很想知道是否有人可以为这种遗漏合理化。

编辑:感谢您的建议。虽然蒙面文本框和数字上下有它们的位置;我对一个看起来像文本框但在按键时自动执行验证输入对应于有效数字的控件感兴趣。在我的(诚然有限的)经验中,这是使用了很多的东西(我们并不总是想要由蒙面文本框施加的静态约束,就像我们并不总是想要侧面的上下控件一样) .

网上有很多质量不同的实现,实际上在MSDN上甚至有一个例子。

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

4

8 回答 8

4

您可以使用MaskedTextBox

于 2008-09-17T08:29:45.530 回答
4

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

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

于 2008-09-17T09:09:11.660 回答
3

有一个NumericUpDown控件,专门用于输入数字,可以像 TextBox 一样使用。

于 2008-09-17T08:26:43.493 回答
3

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

于 2008-09-17T08:31:10.877 回答
1

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

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

于 2008-09-17T10:31:51.053 回答
0

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

如果它是一个网页,那么对使用 Javascript 的 html 文本框也是如此。

于 2008-09-17T09:20:37.543 回答
0

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

但是,在这种情况下,我认为FilteredTextBox提供了您描述的功能。

于 2008-09-17T10:14:10.583 回答
0

基于第二次编辑:

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

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

您可以处理文本框的 KeyPress 事件,如果传入的字符不可接受,则将 events 参数标记为显示该字符已被处理。下面是一个派生的 TextBox,它只接受数字(和控制字符,如退格,...)。即使该片段使用派生文本框,也没有必要,因为您只需将处理程序添加到其父表单即可。

有关代码示例,请参阅常见问题解答。

于 2008-09-18T02:04:40.097 回答