开始编码之前
在VisualBasic中创建应用程序的最重要的(又往往为人忽视的)部分是设计阶段。需要为应用程序设计一个用户界面,这是显然的;但需要设计代码的结构就不那么显然了。构造应用程序的方法不同,可造成应用程序的性能及代码的可维护性、可使用性不同。 VisualBasic应用程序的代码是用分层方式组织的。典型应用程序包括若干模块:应用程序中每个窗体的窗体模块、共享代码的可选标准模块以及可选的类模块。每个模块包含若干含有代码的过程:event过程、Sub子过程或Function过程,以及Property过程。 判定什么过程属于什么模块,这与创建的应用程序的类型有一定关系。因为VisualBasic是基于对象的,所以,利用应用程序代表的对象来考虑应用程序将是有益的。在这一章,示例应用程序Vcr.vbp的设计建立在盒式录像机和电视机组成的对象基础之上。VCR应用程序包含两个窗体模块、一个标准模块和两个类模块。可用“对象浏览器”来检查工程的结构(图5.2)。
VCR应用程序的主窗体(frmVCR)是VCR与电视屏幕组合的可视图像(图5.3)。它包括几个对象,这些对象以现实世界中的图景为模型。一组命令按钮(cmdPlay、cmdRecord等等)模仿的是操作VCR的按钮。软件VCR还包括时钟(lblTime)、通道指示器(lblChannel)、功能指示器(shpPlay、shpRecord等等)以及显像管(picTV)。Vcr.frm窗体模块包括所有这些对象的事件过程。
在很多情况中都存在着多个对象共享的重复过程。例如,“按下”“放像”、“倒带”或“录像”按钮时就要求“暂停”和“停止”按钮有效。最好创建一个共享的子过程,所有按钮都可调用它,而不要在每个按钮的Click事件过程中重复这段代码。如果将来要修改这些子程序,则只在一个地方修改就可进行全部修改。标准模块Vcr.bas包含各种共享过程。
VCR的某些部分是不可视的,比如磁带的输送机置或录制电视节目的逻辑便是如此。同样,软件VCR的一些功能没有可视图像。这些部分和功能是作为两个类模块Recorder.cls和Tape.cls实现的。clsRecorder模块包含启动“录像”进程的代码;而clsTape模块则包含控制“磁带”方向和速度的代码。这些模块中所定义的类与窗体中的任何对象都没有直接关系。因为它们是独立的代码模块,所以不作任何修改就可轻轻松松重建一个录音程序。
除了设计代码结构之外,建立命名约定也是很重要的。按照缺省规定,VisualBasic将工程的第一个窗体命名为Form1,第二个窗体为Form2,依此类推。如果应用程序中有几个窗体,则最好赋予它们有含义的名字,以免在编写或编辑代码时出现混淆情况。在附录B“VisualBasic编码约定”中列举了一些VisualBasic建议的命名约定。
在进一步了解对象和学习编写代码时,可参考VCR示例应用程序,查找有关各种编码技巧的例子。
代码编写机制
在着手编写代码之前,了解VisualBasic编写代码的机制是很重要的。和任何编程语言一样,VisualBasic有自身的组织、编辑和格式化代码规则。
代码模块
VisualBasic的代码存储在模块中。模块有三种类型:窗体、标准和类。简单的应用程序可以只有一个窗体,应用程序的所有代码都驻留在窗体模块中。而当应用程序庞大复杂时,就要另加窗体。最终可能会发现在几个窗体中都有要执行的公共代码。因为不希望在两个窗体中重复代码,所以要创建一个独立模块,它包含实现公共代码的过程。独立模块应为标准模块。此后可以建立一个包含共享过程的模块库。
每个标准模块、类模块和窗体模块都可包含:
声明。可将常数、类型、变量和动态链接库(DLL)过程的声明放在窗体、类或标准模块的模块级。
过程。Sub、Function或者Property过程包含可以作为单元来执行的代码片段。本章后面的“过程概述”一节中将讨论这些内容。
窗体模块
窗体模块(文件扩展名为.FRM)是大多数VisualBasic应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其它窗体或对象。
标准模块
标准模块(文件扩展名为.BAS)是应用程序内其它模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果能够注意不用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。
类模块
在VisualBasic中类模块(文件扩展名为.CLS)是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口。
详细信息关于在类模块中编写代码的更详细的信息,请参阅第九章“用对象编程”。
注意VisualBasic的专业版和企业版也包含ActiveX文档、ActiveX设计器和用户控件。它们引入了具有不同文件扩展名的新模块类型。从编写代码的角度来看,这些模块应视同为窗体模块。
使用“代码编辑器”
VisualBasic“代码编辑器”是一个窗口,大多数代码都在此窗口上编写。它像一个高度专门化的字处理软件,有许多便于编写VisualBasic代码的功能。图5.4所示为“代码编辑器”窗口。
因为要操作模块中的VisualBasic代码,所以要为每一个从“工程资源管理器”中选择的模块打开一个独立的“代码编辑器”窗口。在每个模块中,对于模块中所包含的每个对象,将模块中的代码再细分出与对象对应的独立部分。用“对象列表框”实现各部分间的切换。在窗体模块中,该列表包含一个通用段,一个属于窗体自身的段以及窗体所包含的每一控件的段。对于类模块,列表包括一个通用段和一个类段;对于标准模块,只有一个通用段被显示。
每一段代码都可包含几个用“过程列表框”访问的不同过程。对窗体或控件的每一个事件过程,窗体模块的过程列表都包含一个独立的段。例如,Label控件的过程列表就包含Change事件段、Click事件段和DblClick事件段等等。类模块只列举类本身的事件过程——初始化和终止。标准模块不列举任何事件过程,因为标准模块不支持事件。
模块通用段的过程列表只包含唯一段——声明段,其中放置模块级的变量、常数和DLL声明。当在模块中添加子过程或函数过程时,那些过程被添加到声明段下方的“过程列表框”中。
代码的两种不同视图都可用于“代码编辑器”窗口。可以一次只查看一个过程,也可以查看模块中的所有过程,这些过程彼此之间用线隔开(如图5.4所示)。为了在两个视图之间进行切换,利用编辑器窗口左下角的“查看选择”按钮。
自动完成编码
VisualBasic能自动填充语句、属性和参数,这些性能使编写代码更加方便。在输入代码时,编辑器列举适当的选择、语句或函数原型或值。通过“工具”菜单上的“选项”命令访问“选项”对话框,在“选项”对话框的“编辑器”选项卡上可用这样的选项,由它们决定是允许还是禁止各代码的设置值。
在代码中输入一控件名时,“自动列出成员特性”会亮出这个控件的下拉式属性表(图5.5)。键入属性名的前几个字母,就会从表中选中该名字,按Tab键将完成这次输入。当不能确认给定的控件有什么样的属性时,这个选项是非常有帮助的。即使选择了禁止“自动列出成员特性”,仍可使用CTRL J组合键得到这种性能。
“自动快速信息”功能显示语句和函数的语法(图5.6)。当输入合法的VisualBasic语句或函数名之后,语法立即显示在当前行的下面,并用黑体字显示它的第一个参数。在输入第一个参数值之后,第二个参数又出现了,同样也是黑体字。“自动快速信息”也可以用CTRL I组合键得到。
书签
在代码编辑器中书签可用来标记代码的某些行,以便您以后可以很容易地返回这些行。书签开关的切换以及定位到已有书签的命令可以在编辑、书签菜单项或编辑工具栏中得到。
详细信息关于如何使用组合键使用“代码编辑器”窗口的各种功能的更详细信息,请参阅“代码窗口的快捷键”。
编码基础
这一部分介绍代码编写机制,包括如何中断和合并代码行、如何添加注释、如何使用数字以及VisualBasic命名约定。
将单行语句分成多行
可以在“代码”窗口中用续行符(一个空格后面跟一个下划线)将长语句分成多行。由于使用续行符,无论在计算机上还是打印出来的代码都变得易读。下面用续行符(_)将代码分成若干行:
Data1.RecordSource=_
"SELECT*FROMTitles,Publishers"_
&"WHEREPublishers.PubId=Titles.PubID"_
&"ANDPublishers.State='CA'"
在同一行内,续行符后面不能加注释。至于在什么地方可以使用续行符,还是有某些限制的。
将多个语句合并到同一行上
通常,一行之中有一个VisualBasic语句,而没有语句终结符,但是也可以将两个或多个语句放在同一行,只是要用冒号(:)将它们分开。
Text1.Text="Hello":Red=255:Text1.BackColor=
Red
但是,为了便于阅读代码,最好还是一行放一个语句。
详细信息关于详细信息,请参阅附录A“VisualBasic的规范、限制和文件格式”。
在代码中添加注释
阅读本手册的例子时常会遇到注释符(')。这个符号告诉VisualBasic,忽略该符号后面的内容。这些内容是代码段中的注释,既是为了方便开发者,也是为了方便以后可能检查源代码的其他程序员。例如:
'这是从屏幕左边
'开始的注释。
Text1.Text="Hi!" '在文本框中放
'欢迎词。
注释可以和语句在同一行,并写在语句的后面,也可占据一整行。上述代码对这两种情况都作了示范。记住,不能在同一行上将注释接在续行符之后。
注意您可以通过选中两行或多行代码并在“编辑”工具栏上通过选择“注释块”或“删除注释块”按钮来对该代码块添加或删除注释符号。
理解数字系统
在本文档中大多数的数值都是十进制的(基数为10)。但有时用十六进制数(基数为16)或八进制数(基数为8)更方便。VisualBasic用前缀&H表示十六进制数,而用&O表示八进制数。下表说明同一个数的十进制、八进制和十六进制表示。
通常不必掌握十六进制或八进制数制,因为计算机可以用任何数制的数工作。但是,对某些任务来说,有的数系就比其它数系更合适,例如利用十六进制数设置屏幕和控件的颜色。
VisualBasic的命名约定
在编写VisualBasic代码时,要声明和命名许多元素(Sub和Function过程、变量、常数等等)。在VisualBasic代码中声明的过程、变量和常数的名字,必须遵循这些规则:
1.它们必须以字母开头。
2.它们不可以包含嵌入的句号或者类型声明字符(规定数据类型的特殊字符)。
3.它们不能超过255个字符。控件、窗体、类和模块的名字不能超过40个字符。
4.它们不能和受到限制的关键字同名。
受到限制的关键字是VisualBasic使用的词,是语言的组成部分。其中包括预定义语句(比如If和Loop)、函数(比如Len和Abs)和操作符(比如Or和Mod)。
详细信息关于关键字表的更详细信息,请参阅《VisualBasic6.0语言参考手册》。
窗体和控件可以和受到限制的关键字同名。例如,可以将某个控件命名为Loop。但在代码中不能用通常的方法引用该控件,因为VisualBasic会认为Loop意味着关键字。例如,下面的代码就会出错。
Loop.Visible=True '出错。
为了引用那些和受到限制的关键字同名的窗体或控件,就必须限定它们,或者将其用方括号[]括起来。例如,下面的代码就不会出错。
MyForm.Loop.Visible=True '用窗体名
'将其限定。
[Loop].Visible=True '方括号
'起了作用。
在引用窗体和控件时都可以用这种方式使用方括号,但在声明变量或定义过程期间,当变量名或过程名与受到限制的关键字相同时,这种方式是不能使用的。方括号还可以用来强制VisualBasic接受其它类型库提供的名称,这些名称与受到限制的关键字冲突。
注意因为键入方括号也是令人厌倦的事情,所以希望少用受到限制的关键字作窗体或控件名。但是,如果VisualBasic的新版本定义了与现有窗体或控件冲突的新关键字,那么在为使用新版本而更新代码时,可以使用这个技巧。_
VisualBasic编码
下面图老师小编跟大家分享VisualBasic编码,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~