VB编程8个优良习惯( x/ V- I' q6 f( E, Z
良好的程序设计风格是反映一个人的程序设计水平的问题,对一个程序来说,仅仅当提供正确的输入时才能产生正确的输出是不够的。一个设计得好的程序必须能在任何条件下,即在它运行过程中可能遇到的各种情况下都能正确地操作。应当把计算机程序设计得能够重复运行或连续运行;它必须很“耐用”,能够经得起偶然的或故意的错误使用。
0 M1 Z5 ?" H' a# g' p* s# M 1、"&"替换"+"' n( f( w2 p( I, o3 C
在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串.& L8 h) h! B$ \- B/ S: n
不正确:5 P" I4 V) C J- m% ]$ e7 |! ?, I1 n
Dim sMessage As String S* r" S' C+ `/ r1 z* c w, _+ K
sMessage = "1" + "2"
* L/ Z: K9 A) y$ R0 K0 ` 正确:7 W7 F0 A: l8 w( [4 t
Dim sMessage As String
4 F* D8 }) z2 [ sMessage = "1" & "2"( a5 F+ j. C! u5 l+ ]! |# f$ i
注意:"&"的后面有个空格
* V1 h T* J. [! G8 k1 s2 O 2、变量命名大小写,语句错落有秩,源代码维护方面' F4 o/ a0 P j) |* l5 x
下面大家比较一下以下两段代码:% t! j& E% m& N/ @: V0 [7 N+ W
读懂难度很大的代码:
' ?, D# a1 I5 C& T4 I Dim SNAME As String
" f) Y t2 ^8 H+ s* ~0 V% `3 A Dim NTURN As Integer6 M. {) H2 w, C/ X
If NTURN = 0 Then
0 C4 A2 ]: K: s8 g& m0 q$ W+ X. m0 t7 \ If SNAME = "vbeden" Then& G9 `. S' I& c7 J, F
Do While NTURN < 4
/ t. H/ V, U3 t7 t NTURN = NTURN + 1
# j$ R" ]& z+ V* I7 ^+ q$ c. z: z Loop
8 k8 i# k( o- K0 f End If
! C! S1 ]+ c6 j0 f9 o: d End If' R( R6 p3 i" E5 T" ~" m$ g
容易读懂的代码:! M2 `6 b# y* E9 i1 `2 v# x
Dim sName As String# m$ h" ]; b6 [' V. g. R
Dim nTurn As Integer
' d) { o1 }- s' V% O If nTurn = 0 Then0 a. P8 E+ S( u0 N0 G1 _, H# a
If sName = "vbeden" Then. Q! m, q; T! _: P; B% C
Do While nTurn < 4; I; M+ L8 n' g2 y0 U: R: t6 d
nTurn = nTurn + 1
9 u3 v$ ~+ s' j, u Loop
& ^1 c) s9 |% d/ `" a End If
8 y6 n) Y# L8 N: k$ Y, F& n4 i/ m End If- m$ I3 v% R7 h' }
3、请养成以下的“对象命名约定”良好习惯
( ]5 Z; o( p9 x8 u* J 推荐使用的控件前缀
0 t [: `# q7 _! T. i: ^# H& o5 r 控件类型 前缀 例子
- @/ u7 q) j$ \: q" o4 N 复选框Check box chk chkReadOnly( o: j2 @9 c5 v! H; q
组合框Combo box cbo cboEnglish
6 G+ U7 S Y/ [' x- W 命令按钮Command button cmd cmdExit0 J+ X/ y3 a# I# v7 R
通用对话框Common dialog dlg dlgFileOpen
0 N. r1 b5 `9 U0 O* c4 U+ [+ j 目录列表框Directory list box dir dirSource
, S/ }. u" ]0 {. U/ l 驱动器列表框Drive list box drv drvTarget( c/ b) M! }2 G
文件列表框File list box fil filSource0 E( R) P% A0 c0 O2 Q z
窗体Form frm frmEntry. J' j7 z: _% e+ @. k; g8 W
图象框Image img imgIcon6 x/ \2 @3 y0 p* P
标签Label lbl lblHelpMessage0 S/ j: j" c# ^' p! K# H
列表框List box lst lstPolicyCodes" m" E( f) X/ F- s
菜单Menu mnu mnuFileOpen
H% F9 ~: m2 E9 r. u 单选按钮Option button opt optGender Z# f( i/ V' f3 b
图片框Picture box pic picVGA8 `# o, l5 u$ t
文本框Text box txt txtLastName
: i! Q: I9 Q" v. F6 {' \& g$ [) c 时钟控件Timer tmr tmrAlarm/ K* n7 V" w) V4 k
变量+ _ n% ~5 ]! F1 H- r2 U: L* L" Q
声明所有的变量将会节省编程时间,因为键入操作引起的错误减少了(例如,究竟是 aUserNameTmp,还是 sUserNameTmp,还是 sUserNameTemp)。在“选项”对话框的“编辑器”标签中,复选“要求变量声明”选项。Option Explicit 语句要求在 Visual Basic 程序中声明所有的变量。+ X% T! S' ?' j6 z7 r
应该给变量加前缀来指明它们的数据类型。而且前缀可以被扩展,用来指明变量范围,特别是对大型程序。
8 Q7 w. F. h3 U B 用下列前缀来指明一个变量的数据类型。/ e- z# Z8 E1 h. a5 p
变量数据类型) `! M+ B- e5 G! J
数据类型 前缀 例子' s5 R- a, l) r8 P. m& X
String (字符串类型) str strFName
8 k }# i8 E# q i" O1 `7 j: w Integer (短整数类型) int intQuantity
6 u0 J- X' m( |* t Long (长整数类型) lng lngDistance* r- v4 O4 s5 O5 `1 ^
Single (单精度浮点数类型) sng sngAverage
( `$ P' |* c1 Q Double (双精度浮点数类型) dbl dblTolerance
+ J* P, b$ h* j Boolean (布尔类型) bln blnFound
: b0 K+ @+ c' k! {2 H, V' b Byte(字节类型) byt bytRasterData9 a( J6 A( D( h" v
Date (日期类型) dte dteNow( _/ ~0 i* k& W7 _
Currency (货币类型) cur curRevenue
; S3 A9 J" R/ K5 b! B7 l Object (对象类型) obj objCurrent
0 y+ ]. k0 ~% C# L; F" ]5 V6 V, l* i Variant (变体类型) vnt vntCheckSum# U! N: |1 P' K; A/ }% d
4、在简单的选择条件情况下,使用IIf()函数7 W& v; o# I U0 {' q
繁琐的代码:
6 @. R/ G3 }. @* o) m If nNum = 0 Then! {% K+ W7 j# u7 w! g* T
sName = "sancy"* y2 `0 x* [/ d" W, K
Else" D6 o7 V h# M7 X5 m! S
sName = "Xu"
& s1 K$ Y$ B1 f3 L5 B) e End If
/ y( B) a6 ]* A+ L: B' Z% I9 O* ~% @ 简单的代码:" C( T5 k6 {5 m' k
sName=IIf(nNum=0,"sancy","Xu")
7 g8 E0 t1 y. Q! B5 u 5、尽量使用Debug.Print进行调试
. ]$ Z& |8 Z2 x# w# I9 R 在很多初学者的调试中,用MsgBox来跟踪变量值.其实用Debug.Print不仅可以达到同样的功效,而且在程序最后编译过程中,会被忽略.而MsgBox必须手动注释或删除.
& a+ A; Z( N6 V, D; \; l; U 通常:' }1 D4 `+ [; W4 S
MsgBox nName
. T! k9 c( J; g! i 应该:
4 Z6 G; R5 H- L1 o5 i Debug.Print nName
3 n. }$ O0 p. F+ i 6、在重复对某一对象的属性进行修改时,尽量使用With....End With
: }, i: i7 D- j1 x9 ^ 通常:
1 E \9 v' n7 J2 e Form1.Height = 5000
: @# |$ S2 n1 {6 R Form1.Width = 60004 d: z# m' r5 D. G
Form1.Caption = "This is MyLabel"% I) Q; n- ?2 `) r& C$ x* N
应该:. Z p" V% U6 y& }5 G( X
With Form11 g0 {1 b# B$ Y
.Height = 5000
# H! w2 s7 y# J- G$ Z .Width = 6000
0 D8 k& k. s- r0 c, X9 M" \7 p5 ? .Caption = "This is MyLabel"+ d- Y+ a. t! ~ _ G' _4 p
End With
2 V Y+ U* ^4 L 这种结构程序执行效率比较高,特别在循环语句里 u4 W% z8 M5 P
4 z2 @- L8 } n/ e7 i. v& j 7、MsgBox中尽量使用消息图标,这样程序比较有规范
0 I1 o5 q, b" l# I 一般来说# s; U0 M6 z8 Q1 [/ c1 t
vbInformation 用来提示确认或成功操作的消息* {, [% G* v, O' [+ q1 b) {; C
vbExclamation 用来提示警告的消息
4 o0 G" f7 G! S+ z9 n) W* i& Y9 W vbCritical 用来提示危机情况的消息2 o; `( ~( F$ f
vbQuestion 用来提示询问的消息
1 U+ b+ p7 F! E; h 8、在可能的情况下使用枚举
; E. f: O4 ] G- b+ R 枚举的格式为* d* p0 r( X# q" F( D
[Public | Private] Enum name
* c4 l: A" R* R membername [= constantexpression]% M3 R* G' ?) p3 K/ r+ K+ D1 |# P
membername [= constantexpression]. M6 \; |% J8 {. d |
....
6 l/ m& |* ]3 m/ i' M End Enum! x' s# c3 i# m* Q7 N2 T" V
Enum 语句包含下面部分:6 o1 c1 d) M5 R0 r
部分 描述
6 c1 p! S' ^# z0 O/ W/ V& @& [6 A8 a Public 可选的。表示该 Enum 类型在整个工程中都是可见的。Enum 类型的缺省情况是 Public。
, x' A2 x8 Q" H! V; j Private 可选的。表示该 Enum 类型只在所声明的模块中是可见的。
' W6 f6 T8 n, V# b name 必需的。该 Enum 类型的名称。name 必须是一个合法的 Visual Basic 标识符,在定义该 Enum 类型的变量或参数时用该名称来指定类型。 |