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

PocketBalance 应用程序

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.27/5 (21投票s)

2004年5月28日

CPOL

5分钟阅读

viewsIcon

64390

downloadIcon

428

一款用于 Pocket PC 的银行余额预测工具。

PocketBalance

引言

PocketBalance 是一款银行余额预测工具。我想要一个能够告诉我下个月账户余额的工具,而无需花费太多精力来更新它。

几年前我试过一些商业理财软件,但我的银行有点落后,而且整合起来很麻烦。我必须手动输入内容并定期进行核对才能使其正常工作。最后太麻烦了,我用一个简单的 Excel 工作表成功地摆脱了债务 :o)

要让 PocketBalance 正常工作,只需要提供一份经常性交易(水电费账单、工资等)列表以及偶尔的当前余额快照。它可以

  • 管理多个账户(支票/往来账户、储蓄账户、信用卡)
  • 自动应用经常性交易(每日、每月、每两周、每年等)
  • 自动应用定期信用卡还款(适用于“全额还款”和“最低百分比”条款,基于之前的账单余额)
  • 显示一个余额图表,您可以点击该图表来定位交易

当然,如果您愿意,可以为 PocketBalance 添加更多细节。它拥有的细节越多,其余额预测就越准确。

背景/实现

我以前从未尝试过编写 PocketPC 应用程序。我已经做了很多 ASP.NET、大量类库和一些 Windows 窗体,但在这方面我绝对是新手。

我知道我想要 DataSets,并希望 Framework 能帮我完成所有繁重的工作。我的计划是快速创建一个漂亮的类型化数据集,将其绑定到一些控件上,添加一些按钮和一些计算,然后就完成了。小菜一碟 ;o)

接下来的几个晚上(白天有全职工作 + 3个孩子 = 没多少玩的时间),我咒骂 Microsoft 没有给我类型化数据集、XML 序列化或一个足够大的屏幕。我想要使用的所有东西似乎都缺失了 :o( 我很少放弃,我一点一点地解决了它们。

  • 我在 VS.Net 的 XSD 设计器中绘制了我想要的数据的架构。怀着激动的心情,我为它们添加了主键和关系。胜利在望。
  • DataSet 的基础已经有了,所以我只需要用 (ReadXmlSchema) 加载 XSD,我的表就定义好了,看起来很令人满意。我欣喜若狂。
  • 我发现屏幕实际上挺大的,如果你离它近点的话。我只能让每一个像素都物尽其用 :o)

我创建了一些虚拟数据并将其作为嵌入资源(SampleData.xml)。在它能够加载和保存东西之前,它可以处理这个。

在那之后,一切都变得模糊了。我走了一些弯路,尽我所能地回退。我意识到我对 Windows 窗体中的数据绑定了解得远不如我想象的那么多。那里有一个关于 BindingContexts 的整个世界,还有一些我从未尝试过的东西,所以至少这是个好练习。

关注点

我在此过程中遇到的一些难题包括

  • Windows 窗体控件只是包装了常规的 Windows CE 控件,但它们不允许你覆盖太多东西。我想要漂亮的列表框和一个图表,但内置控件无法满足要求 :o( 我很快发现创建新控件非常容易(可能比修改内置控件更容易),所以我匆忙创建了一个快速的二维图表查看器控件(参见 PocketGraph 程序集)。
  • 我与内置的 ListView 控件搏斗,试图显示交易,但它打败了我。它以一种半吊子的方式绘制每一行,并且不支持数据绑定 :o( 我非常讨厌它,所以我写了自己的(PocketControls 程序集中的 DetailView)。它不是一个完整的替代品,但它完成了我需要的所有功能。
  • 创建窗体似乎非常缓慢。我投入了一些过度设计的代码来一次性创建它们,这样就可以忍受了(从中吸取了 MSDN 的 FormStack 示例的一些想法)。
  • 我想使用 GUID 作为 DataSet 中的行标识符(这样我就不必担心唯一性问题),但是 PocketPC 不知道如何生成它们 :o( 幸运的是,MSDN 来拯救我了,它提供了 这篇文章(发布在 CodeProject 上),它成为了一个新的“PocketGuid”程序集。
  • 在 VS.Net 设计器中调整控件的大小和位置可能会很麻烦,而且内置控件在具有无法关闭的边框等方面似乎不一致。创建自定义控件非常值得,因为你可以选择忘记边框,而且还可以实现双缓冲以实现无闪烁的操作……

最终,我让它完成了我想要的所有功能(我相信还有亿万个 bug),然后开始编写安装程序。如果没有 Simon Kittle 这个人写了 这篇非常有用的文章,这本该是一件令人头疼的事情(它不像创建常规设置项目那样流畅)。

这肯定不是一个“最佳实践”的实现。我把它保持得相当简单,但有些地方有点不一致(它大部分在使用数据绑定,但有几个例子是手动初始化的)。不过没有太大的问题——我只会把它当作一个学习的练习 ;o)

自从开始做这个项目以来,我意识到开发 PocketPC 应用程序是相当令人满意的。一些最糟糕的时刻就像通过灌肠拔牙一样痛苦,但一旦你接受了限制,它(大部分)就能很好地契合。我已经决定了我的下一个 PPC 项目是什么……如果结果不错,我将在这里发布 :o)

一些截图

历史

目前还没有,但未来会有很多!

© . All rights reserved.