65.9K
CodeProject 正在变化。 阅读更多。
Home

VB.NET 中的货币输入

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.74/5 (4投票s)

2007 年 11 月 20 日

CPOL

3分钟阅读

viewsIcon

39873

downloadIcon

1213

VB.NET 中的货币输入框

引言

在开发一个相当大的项目时,我经常需要输入货币值。 由于该项目具有极高的标准,因此使用掩码文本框是不可接受的。 这个框非常容易使用,只需引用库并将控件放到你的窗体上即可。 本文中的代码来自 VB.NET 版本,因为这是我首先创建的版本。

这篇文章发表一天后,我得到的反响非常平淡,所以我花了一天的时间清理代码并扩展文章本身。 希望这个新版本更符合你在这个网站上看到的风格。

ZIP 文件包含完整的解决方案。 DLL 位于Currency Library\bin\release 文件夹中。

背景

该框位于一个控件库中,继承了一个普通的文本框,带有一个用于输入和输出信息的属性,并重写了KeyPressKeyDown 事件。 此版本不处理千位分隔符,但这即将到来,我将在新版本准备就绪后立即发布。

Using the Code

使用这个框非常简单; 引用相应的库,并像添加其他控件一样添加它。 传入和传出的值是 Currency 类。 该类也在 DLL 中定义,包括从 SingleDoubleDecimalString 值设置值的方法。 它还具有每种类型的构造函数以及用于加法、减法、乘法、符号反转和税收的运算符。 源代码有很好的文档记录,包括 XML 标签,因此我不会在这里过多地介绍它。 大部分代码几乎都无休止地嵌套在 If 语句中。

关注点

我很惊讶需要进行多少检查才能始终保持值的有效性。 随着时间的推移,我认为我已经想出了一个非常有用的控件,它在 VB 中已经消失很长时间了。

重大变更

自从发布上一个版本以来,我发现处理删除键和退格键存在重大缺陷。 我正在使用 e.Handled 来表明它们已被处理,但仍然以一个的价格获得两个按键。 在纠正这个问题时,我发现了 e.SupressKeyPress,它很好地纠正了这个问题。 我还移动了 e.Handlede.SupressKeyPress 调用的位置,以便不添加任何“坏”字符,并且不会丢失文本框的其他功能。

我还发现文本框中所做的更改没有反映在底层的 Currency 值中。 这已被修复。

我还通过使 Amount 属性可读/写,从而更容易获取和设置文本框的 Currency 值。

历史

  • v1.0 - 初始版本实现了除千位分隔符和负值之外的所有功能
  • v1.1 - 通过删除一些冗余检查并使其更易于遵循来清理源代码
  • v2.1 - 添加了 Currency 类、负值支持,并修复了删除和退格处理
  • v2.2 – 修复了文本框中的更改未更新到底层 Currency 值的问题
© . All rights reserved.