VB.NET 中的货币输入
VB.NET 中的货币输入框
引言
在开发一个相当大的项目时,我经常需要输入货币值。 由于该项目具有极高的标准,因此使用掩码文本框是不可接受的。 这个框非常容易使用,只需引用库并将控件放到你的窗体上即可。 本文中的代码来自 VB.NET 版本,因为这是我首先创建的版本。
这篇文章发表一天后,我得到的反响非常平淡,所以我花了一天的时间清理代码并扩展文章本身。 希望这个新版本更符合你在这个网站上看到的风格。
ZIP 文件包含完整的解决方案。 DLL 位于Currency Library\bin\release 文件夹中。
背景
该框位于一个控件库中,继承了一个普通的文本框,带有一个用于输入和输出信息的属性,并重写了KeyPress
和 KeyDown
事件。 此版本不处理千位分隔符,但这即将到来,我将在新版本准备就绪后立即发布。
Using the Code
使用这个框非常简单; 引用相应的库,并像添加其他控件一样添加它。 传入和传出的值是 Currency
类。 该类也在 DLL 中定义,包括从 Single
、Double
、Decimal
或 String
值设置值的方法。 它还具有每种类型的构造函数以及用于加法、减法、乘法、符号反转和税收的运算符。 源代码有很好的文档记录,包括 XML 标签,因此我不会在这里过多地介绍它。 大部分代码几乎都无休止地嵌套在 If
语句中。
关注点
我很惊讶需要进行多少检查才能始终保持值的有效性。 随着时间的推移,我认为我已经想出了一个非常有用的控件,它在 VB 中已经消失很长时间了。
重大变更
自从发布上一个版本以来,我发现处理删除键和退格键存在重大缺陷。 我正在使用 e.Handled
来表明它们已被处理,但仍然以一个的价格获得两个按键。 在纠正这个问题时,我发现了 e.SupressKeyPress
,它很好地纠正了这个问题。 我还移动了 e.Handled
和 e.SupressKeyPress
调用的位置,以便不添加任何“坏”字符,并且不会丢失文本框的其他功能。
我还发现文本框中所做的更改没有反映在底层的 Currency
值中。 这已被修复。
我还通过使 Amount
属性可读/写,从而更容易获取和设置文本框的 Currency
值。
历史
- v1.0 - 初始版本实现了除千位分隔符和负值之外的所有功能
- v1.1 - 通过删除一些冗余检查并使其更易于遵循来清理源代码
- v2.1 - 添加了
Currency
类、负值支持,并修复了删除和退格处理 - v2.2 – 修复了文本框中的更改未更新到底层
Currency
值的问题