开始编码之前

在 Visual Basic 中创建应用程序的最重要的(又往往为人忽视的)部分是设计阶段。需要为应用程序设计一个用户界面,这是显然的;但需要设计代码的结构就不那么显然了。构造应用程序的方法不同,可造成应用程序的性能及代码的可维护性、可使用性不同。

 Visual Basic 应用程序的代码是用分层方式组织的。典型应用程序包括若干模块:应用程序中每个窗体的窗体模块、共享代码的可选标准模块以及可选的类模块。 每个模块包含若干含有代码的过程:event 过程、 Sub 子过程或 function 过程,以及 Property 过程。

判定什么过程属于什么模块,这与创建的应用程序的类型有一定关系。因为 Visual Basic 是基于对象的,所以,利用应用程序代表的对象来考虑应用程序将是有益的。在这一章,示例应用程序 Vcr.vbp 的设计建立在盒式录像机和电视机组成的对象基础之上。VCR 应用程序包含两个窗体模块、一个标准模块和两个类模块。可用“对象浏览器”来检查工程的结构(图 5.2)。

图 5.2 在“对象浏览器”中显示的 VCR 工程结构

VCR 应用程序的主窗体 (frmVCR) 是 VCR与电视屏幕组合的可视图象(图 5.3)。它包括几个对象,这些对象以现实世界中的图景为模型。一组命令按钮(cmdPlay、cmdRecord 等等)模仿的是操作 VCR 的按钮。软件 VCR 还包括时钟 (lblTime)、通道指示器 (lblChannel)、功能指示器(shpPlay、shpRecord 等等)以及显象管 (picTV)。Vcr.frm 窗体模块包括所有这些对象的事件过程。

 图 5.3 VCR 应用程序的主窗体

在很多情况中都存在着多个对象共享的重复过程。例如,“按下”“放像”、“倒带”或“录像”按钮时就要求“暂停”和“停止”按钮有效。最好创建一个共享的子过程,所有按钮都可调用它,而不要在每个按钮的 Click 事件过程中重复这段代码。如果将来要修改这些子程序,则只在一个地方修改就可进行全部修改。标准模块 Vcr.bas 包含各种共享过程。

VCR 的某些部分是不可视的,比如磁带的输送机置或录制电视节目的逻辑便是如此。同样,软件 VCR 的一些功能没有可视图象。这些部分和功能是作为两个类模块 Recorder.cls 和 Tape.cls 实现的。clsRecorder 模块包含启动“录像”进程的代码;而 clsTape 模块则包含控制“磁带”方向和速度的代码。这些模块中所定义的类与窗体中的任何对象都没有直接关系。因为它们是独立的代码模块,所以不作任何修改就可轻轻松松重建一个录音程序。

除了设计代码结构之外,建立命名约定也是很重要的。按照缺省规定,Visual Basic 将工程的第一个窗体命名为 Form1,第二个窗体为 Form2,依此类推。如果应用程序中有几个窗体,则最好赋予它们有含义的名字,以免在编写或编辑代码时出现混淆情况。在附录 B“Visual Basic 编码约定”中列举了一些 Visual Basic 建议的命名约定。

在进一步了解对象和学习编写代码时,可参考 VCR 示例应用程序,查找有关各种编码技巧的例子。