VB编程的八个优良习惯
VB编程的八个优良习惯
1、"&"替换"+"
在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串.
不正确:
Dim sMessage As String
sMessage = "1" + "2"
正确:
Dim sMessage As String
sMessage = "1" & "2"
注意:"&"的后面有个空格
2、变量命名大小写,语句错落有秩,源代码维护方面
下面大家比较一下以下两段代码:
读懂难度很大的代码:
Dim SNAME As String
Dim NTURN As Integer
If NTURN = 0 Then
If SNAME = "vbeden" Then
Do While NTURN < 4
NTURN = NTURN + 1
Loop
End If
End If
容易读懂的代码:
Dim sName As String
Dim nTurn As Integer
If nTurn = 0 Then
If sName = "vbeden" Then
Do While nTurn < 4
nTurn = nTurn + 1
Loop
End If
End If
[返回索引]
3、请养成以下的“对象命名约定”良好习惯
应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约定很实用。除了最前面"mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。下表列出了一些例子。
当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在Visual Basic 的“属性”窗口中。而且,菜单控件的名字清楚地表示出它们所属的菜单项。
为其它控件选择前缀
对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。只有当需要澄清时,才使用多于三个字符的前缀。
常量和变量命名约定
除了对象之外,常量和变量也需要良好格式的命名约定。本节列出了Visual Basic 支持的常量和变量的推荐约定。并且讨论标识数据类型和范围的问题。
变量应该总是被定义在尽可能小的范围内。全局(Public) 变量可以导致极其复杂的状态机构,并且使一个应用程序的逻辑非常难于理解。全局变量也使代码的重用和维护更加困难。
在Visual Basic 的应用程序中,只有当没有其它方便途径在窗体之间共享数据时才使用全局变量。当必须使用全局变量时,在一个单一模块中声明它们,并按功能分组。给这个模块取一个有意义的名称,以指明它的作用,如Public.bas。
较好的编码习惯是尽可能写模块化的代码。例如,如果应用程序显示一个对话框,就把要完成这一对话任务所需要的所有控件和代码放在单一的窗体中。这有助于将应用程序的代码组织在有用的组件中,并减小它运行时的开销。
除了全局变量(应该是不被传递的),过程和函数应该仅对传递给它们的对象操作。在过程中使用的全局变量应该在过程起始处的声明部分中标识出来。此外,应该用ByVal 将参数传递给Sub 过程及function 过程,除非明显地需要改变已传递的参数值。
随着工程大小的增长,划分变量范围的工作也迅速增加。在类型前缀的前面放置单字母范围前缀标明了这种增长,但变量名的长度并没有增加很多。
如果一个变量在标准模块或窗体模块中被声明为Public,那么该变量具有全局范围。如果一个变量在标准模块或窗体模块中被分别声明为Private,那么该变量有模块级范围。
注意:一致性是卓有成效地使用这种技术的关键;Visual Basic 中的语法检查器不会捕捉以 "p." 开头的模块级变量。
常量
常量名的主体是大小写混合的,每个单词的首字母大写。尽管标准Visual Basic 常量不包含数据类型和范围信息,但是象i、s、g 和m 这样的前缀对于理解一个常量的值和范围还是很有用的。对于常量名,应遵循与变量相同的规则。例如:
mintUserListMax '对用户列表的最大限制
'(整数值,本地到模块)
gstrNewLine '新行字符
'(字符串,应用程序全局使用)
变量
声明所有的变量将会节省编程时间,因为键入操作引起的错误减少了(例如,究竟是aUserNameTmp,还是sUserNameTmp,还是sUserNameTemp)。在“选项”对话框的“编辑器”标签中,复选“要求变量声明”选项。Option Explicit 语句要求在Visual Basic 程序中声明所有的变量。
应该给变量加前缀来指明它们的数据类型。而且前缀可以被扩展,用来指明变量范围,特别是对大型程序。用下列前缀来指明一个变量的数据类型。
描述变量和过程名
变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如InitNameArray 或CloseDialog。
对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过32 个字符的变量名在VGA 显示器上读起来就困难了。
当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用Cnt,一会儿使用Count,将导致不必要的混淆。
用户定义的类型
在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以"u" 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。
[返回索引]
4、在简单的选择条件情况下,使用IIf()函数
罗索的代码:
If nNum = 0 Then
sName = "sancy"
Else
sName = "Xu"
End If
简单的代码:
sName=IIf(nNum=0,"sancy","Xu")
5、尽量使用Debug.Print进行调试
在很多初学者的调试中,用MsgBox来跟踪变量值.其实用Debug.Print不仅可以达到同样的功效,而且在程序最后编译过程中,会被忽略.而MsgBox必须手动注释或删除.
通常:
MsgBox nName
应该:
Debug.Print nName
6、在重复对某一对象的属性进行修改时,尽量使用With....End With
通常:
Form1.Height = 5000
Form1.Width = 6000
Form1.Caption = "This is MyLabel"
应该:
With Form1
.Height = 5000
.Width = 6000
.Caption = "This is MyLabel"
End With
这种结构程序执行效率比较高,特别在循环语句里。
7、MsgBox中尽量使用消息图标,这样程序比较有规范
一般来说
vbInformation 用来提示确认或成功操作的消息
vbExclamation 用来提示警告的消息
vbCritical 用来提示危机情况的消息
vbQuestion 用来提示询问的消息
[返回索引]
8、在可能的情况下使用枚举
枚举的格式为
[Public | Private] Enum name
membername [= constantexpression]
membername [= constantexpression]
....
End Enum
Enum语句包含下面部分:
说明
所谓枚举变量,就是指用Enum类型定义的变量。变量和参数都可以定义为Enum类型。Enum类型中的元素被初始化为Enum语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:
Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum
Enum语句只能在模块级别中出现。定义Enum类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定Enum类型。类模块中的Public Enum类型并不是该类的成员;只不过它们也被写入到类型库中。在标准模块中定义的Enum类型则不写到类型库中。具有相同名字的Public Enum类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类
型库中有两个Enum类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。
不能在With块中使用Enum类型作为目标。
Enum 语句示例
下面的示例演示用Enum语句定义一个命名常数的集合。在本例中是一些可以选择的颜色常数用于设计数据库的数据输入窗体。
Public Enum InterfaceColors
icMistyRose = &HE1E4FF&
icSlateGray = &H908070&
icDodgerBlue = &HFF901E&
icDeepSkyBlue = &HFFBF00&
icSpringGreen = &H7FFF00&
icForestGreen = &H228B22&
icGoldenrod = &H20A5DA&
icFirebrick = &H2222B2&
End Enum
好处是加快编程速度
VB6.0初学者的10个编程小技巧
1、如果一行程序太长,能不能换行?
VB的程序代码是允许换行书写的,只要在每次换行的最后一个字符加上换行字符“_”就可以了。例如:
Sub PicMove()
Frm.Picture2.Left = Frm.Picture1.Left + _ ?加上换行符
Frm.Picture1.Width
End Sub
2、如何在设计的时候清空存在的图片?
用鼠标点中该图片,在属性窗口中选中Picture属性,按Del键便可清空图片。
3、Visual Basic 如何注释一段较长程序代码?
VB注释程序代码的符号是“注释:”,只要在某行程序前面加上“注释:”,就可以注释该行程序。但如果程序代码很长的时候,一行一行地注释令人觉得难以忍受。VB本身提供了这个功能,在主菜单“视图”选项的“工具栏”下,选中Edit,VB的界面会出现一排工具按钮,其中的手形图标按钮后的两个按钮用于“设置注释块”和“解除注释块”。
4、怎么实现鼠标一移上去就出现小提示窗口的功能?
VB 里每个控件都有ToolTipText属性,只要加上一行程序就可以了。
例如:Label1.ToolTipText = "这是提示!"。
5、如何获得当前软件的运行磁盘目录和命令行参数?
VB里面有个系统对象叫App。App.Path就是当前软件的运行目录。而命令行参数存放在一个系统变量里面,叫Command。程序语句如下:
Label1.Caption=App.Path
Label2.Caption=Command$
6、我想换掉鼠标显示的形状,怎么做?
VB提供的系统控件一般都有MousePointer和MouseIcon属性。我们可以寻找自己喜欢的*.ICO,*.CU R文件,实现的程序如下:
Screen.MousePointer= 99 ?用户鼠标类型
Screen.MouseIcon=LoadPicture("C:\ABC\1.ICO") ?读取鼠标的图标文件
7、如何设置程序的错误出口?
On Error语句用于程序的错误出口处理。一般的处理方法有两种:
1) 遇到错误跳转到某一行程序去执行,On Error GoTo someline。
例如:
On Error GoTo ERR_LINE
...
Label1.Caption=“正确执行”
ERR_LINE:
...
Label1.Caption=“出错了!”
2) 遇到错误之后忽略当前错误,继续执行,On Error Resume Next。
例如:
On Error Resume Next
...
Label1.Caption=“不管对不对都要执行”
...
8、怎样获得键盘输入和判断敲键的Ascii值?
把窗体的KeyPreview属性设置成True,然后在Form_KeyPress 事件里编写程序代码如下:
Private Sub Form_KeyPress(KeyAscii As Integer)
Me.Caption = Str(KeyAscii) …取得键盘输入的字符
...
End Sub
9、我希望窗体一运行就在屏幕的中央,怎么实现?
VB的系统对象Screen记录了当前显示模式的高度和宽度,可以利用这个值来设置窗体的位置。
Sub CenterForm(frm As Form) …定义过程
frm.Move (Screen.width - frm.width) \ 2, (Screen.Height - frm.Height) \ 2
End Sub
Private Sub Form_Load()
CenterForm Me ?调用过程
End Sub
10、很多软件都有鼠标在文本框TextBox一按下,就选中所有文字的功能,是怎么实现的?
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text) ?过程调用
End Sub