.NET NumericTextBox

时间:2020-03-05 18:58:16  来源:igfitidea点击:

有谁知道为什么Microsoft不会在其.NET Framework中附带数字文本框,例如一个可以确保输入的字符始终是有效数字的文本框?这是在不同风格的应用程序中普遍使用的东西,并且确实是大多数GUI库(嗯,我知道的)以某种方式提供的东西。尽管编写自己的书并不难,但也不是一件容易的事。

因此,我有兴趣了解是否有人可以合理化这一遗漏。

编辑:谢谢你的建议。遮罩的文本框和数字上下都有其位置;我对一个看起来像文本框的控件感兴趣,但是该控件会自动在按键上执行验证,以确保输入内容与有效数字相对应。在我的经验(有限的经验)中,这是经常使用的东西(我们并不总是希望蒙版文本框施加静态约束,就像我们并不总是希望在侧面使用上下控件一样) 。

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

edit2:谢谢大家,所以听起来好像数字上下是仅用于数字输入的.NET控件(以及我们实际上没有显式的数字文本框控件的原因)。如果它会自动禁止输入非数字字符(在按键上,粘贴上等),那将是很好的选择,但是我想它足以在控件失去焦点时执行验证。而且,如果有人真的很热衷,可以在按键,粘贴验证上进行...

解决方案

回答

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

回答

我们可以使用MaskedTextBox

回答

从WinForms 2.0开始,我们有了MaskedTextBox。我们可以将掩码设置为任意值,例如,对于数字,请使用全0的掩码。

回答

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

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

回答

我们还可以派生TextBox类并获取键盘事件,并确保没有写数字。

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

回答

Microsoft将其留给第三方来填补有关工具箱中缺少控件的空白。我认为时间和成本将在其原理中体现出来。

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

回答

某些.NET Framework控件奇怪地没有公开它们包装的基础Windows控件的所有功能。在这种情况下,由于某种原因,尚未实现ES_NUMBER样式。

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

回答

根据第二次编辑:

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

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

我们可以处理文本框的KeyPress事件,如果传入的char不可接受,则将events参数标记为表明已处理字符。下面是一个派生的TextBox,它仅接受数字(以及控制字符,例如退格键,...)。即使代码段使用派生的文本框,也没有必要,因为我们可以将处理程序添加到其父窗体中。

有关代码示例,请参见FAQ。