visual basic編程規范
必須打開設置選項的“要求變量聲明”,“對齊控件到網格”,“自動縮進”開關。 tab的寬度統一為4個空格,網格單位一律設為:width 60 height 60。
(注意:在任何時候,不能使用中文及全角字符,只允許使用英文字母、下劃線和數字)
activex控件和dll工程命名格式為(….lib),exe工程直接命名,如果是通用組件工程,直接命名,如果是項目或產品工程,則使用項目或產品縮寫作為前綴。如:xwy….lib。 工程命名不必縮寫,為了表達意思和用途,可以盡可能地長,而且命名格式采用 (名詞) 、 (形容詞 + 名詞) 或 (名詞 + 動作的名詞形式)。如: stockoperationlib或stocklib。
全局變量加前綴:’g_’ 例如:g_strfdbm
模塊級變量加前綴:’m_’ 例如:m_strfdbm
過程級變量不加前綴 全局變量和模塊級變量應該盡量使用全名稱,不推薦使用縮寫,如:gentitymanager常見的變量類型和控件類型前綴如下表所示:變量類型前綴列表
數據類型
前綴
示例
boolean
bln
blnloggedin
currency
cur
cursalary
control
ctl
ctllastcontrol
double
dbl
dblmiles
errobject
err
errlasterror
single
sng
sngyears
handle
hwd
hwdpicture
long
lng
lngonhand
object
obj
objusertable
integer
int
intage
string
str
strname
user-defined type
udt
udtemployee
variant (including dates)
vnt
vntdatehired
array
arr
arremployees 數據庫對象前綴示例database
dbs
dbsaccounts recordset
rec
recforecast command
cmd
cmdquery connection
con
consql
控件命名一律使用控件類型縮寫+控件用途的命名方式,縮寫規則同變量命名,以下是常用控件的類型縮寫,應該嚴格遵守。如果使用了新的控件(包括升級版本),必須向公司提出申請,經評審通過后,協同一致其類型名稱縮寫,再進行使用。 控件類型前綴列表
控件
前綴
舉例
ado
adobiblio
animated button
ani
animailbox
checkbox
chk
chkprint
combo box
cbo
cbotitle
command button
cmd
cmdcancel
communications
com
comfax
data
dat
datbiblio
data-bound combo box
dbcbo
dbcbolanguage
data-bound grid
dbgrd
dbgrdqueryresult
common dialog control
dlg
dlgcommon
control
ctr
ctrcurrent
directory list box
dir
dirsource
drive list box
drv
drvtarget
dtpicker dropdatecontrol
dt
enumeditbox
enm
file list box
fil
filsource
frame
fra
fralanguage
form
frm
frmmain
vfgrid
grd
graph
gra
group push button
gpb
gpbchannel
hierarchical flexgrid
flex
flexorders
horizontal scroll bar
hsb
hsbvolume
image
img
imgicon
image imagelist
img
label
lbl
lblhelpmessage
line
lin
linvertical
list box
lst
lstresultcodes
listview
lv
mci
mci
mcivideo
mdi child form
mdi
mdicontact
menu control
mnu
mnufileopen
numeditbox
nm
ole container
ole
olephoto
option button
opt
optspanish
panel
pnl
pnlsettings
picture box
pic
picdiskspace
picture clip
clp
clptoolbar
progressbar
prg
prgloadfile
report
rpt
scroll bar
sbr
shape
shp
shpcircle
slider
sld
sldscale
spin
spn
statusbar
st
toolbar
tb
text box
txt
txtaddress
timer
tmr
tmralarm
treeview
tv
tvflbm
vertical scroll bar
vsb
vsbrate
此處函數包括sub和function,以下這兩種過程統稱為函數。 函數表示的是一個動作,所以它的結構應該是 動詞+名詞,動詞必須小寫,后面的名稱首字母大寫,如:getmaterialcodeupdategridreadorder 函數命名盡量不要使用縮寫,而且它的名稱應該使人一目了然,能夠從名稱就知道這個函數的功能,不要使用無意義的函數名稱,如:getcode,update,readdata。 當函數名稱不足以表達其功能時,使用在函數頭部加上讓調用者足夠明白的注釋。 參數的命名:參數命名的原則是全部小寫,如果參數包括兩個或以上的單詞時,首單詞字母小寫,其它單詞首字母大寫,如showcol、isupdate。
常量的命名應該全部大寫,使用‘_’作為單詞間的分隔符,單詞盡量使用全名稱,如: public const msg_empty_row as string = “有空行存在!” 解釋:(1) 對一些常用詞應該使用簡寫,如msg(2) 使用public來聲明常量(3) 對常量的聲明必須帶上類型,如上面的as string
屬性的命名采用首字母大寫的原則,如itemcount item
類的命名:cls前綴+功能名詞,并且單詞首字母大寫。如:clssystemconfig 窗體命名:使用frm前綴+功能名詞,并且單詞首字母大寫。如:frmlist。 模塊命名:mod前綴+功能名詞,并且單詞首字母大寫。如modlist。以上三種命名在一個項目內必須保持唯一。
自定義控件的命名:名詞 + ctrl 如:editgridctrl
如下: dim i as integerdim j as integerdim
空行是區分代碼塊與塊的間隔,在函數之間必須加上空行(兩行左右),而函數內部,變量聲明塊和實現塊(實現塊指除變量聲明外的其它代碼)要使用空行來間隔(一行),實現塊的內部,通過空行來標識一個功能段,如: private sub check(order as nysalebacklib.order)
'減少庫存 dim objstockitem as nystocklib.stockitemdim objstock as nystocklib.stockdim i as integer set objstock = createstock() for i = 0 to order.itemcount - 1 set objstockitem = order.item(i)
'減少庫存 call objstock.reduceitem(objstockitem, true) next i set objstock = nothing end sub
(注意:不要使用過多的空行,空行太多影響代碼閱讀!)
注:goto標簽不縮進 對于基本的控制結構,必須要有縮進,如:if、do、with、for、open、select塊,縮進示例如下:private function getmax(byref lngarray() as long) as long dim lngmax as long dim lngcount as long getmax=0 for lngcount =0 to ubound(lngarray)
if lngarray (lngcount)>lngmax then lngmax=lngarray(lngcount) end if next end function 對于過長的語句,必須使用續行,續行位置要有明顯意義,示例: sql = “select [code],[name] from [person] “ _ & “ where [code] like ‘001%’ “ & “ and [code] like ‘002%’ “
函數的參數如果過長,也應該續行,示例:
'
'增加庫存
' productcode 產品編號
' spec 長度規格
' color 顏色
' patch 是否拼圈
' volumn 盤號
' ordinal 子庫存順序號
' length 長度
' ischeck 是否審核入庫增加(否則為棄審出庫增加) public sub adddetail(productcode as string, _ spec as double, _ color as string, _ patch as boolean, _ volumn as string, _ ordinal as integer, _ length as double, _ ischeck as boolean)
'******************************************************
'
'函數所實現的功能
'函數的參數1的含義:xxxxx
'函數的參數2的含義:xxxxx
'……
'函數返回值所代表的錯誤信息:xxxxx
'函數的返回值為0表示執行成功,為其它值表示執行失敗
'
'****************************************************** public(private) function forexample(……………………) as long '………………………………………… end function
在每個代碼模塊(窗體、類、模塊、控件)的最上面,必須寫上代碼編寫人、代碼創建時間、代碼修改時間和修改說明。示例:
'
'庫存修改窗體
'作者 xxxxxx
'建立日期
'修改日期
'增加對庫存修改時同時影響最后入庫日期的功能
dim msg as stringmsg = "this is a paragraph that will be " _& "in a message box. the text is" _& " broken into several lines of code" _& " in the source code, making it easier" _& " for the programmer to read and debug."msgbox msg
dim qry as stringqry = "select *" _& " from titles" _& " where [year published] > 1988"titlesqry.sql = qry
'******************************************************
'
'打開錯誤日志文件,在form_unload()中關閉
'
'****************************************************** dim strexepath as string
if right(app.path, 1) = "/" then strexepath = app.path else strexepath = app.path & "/" end if
interrlogfilehandle = freefile()
open strexepath + "err.log" for append shared as interrlogfilehandle 在主窗體退出函數中添加如下代碼: '******************************************************
'
'關閉錯誤日志文件
'
'****************************************************** close #interrlogfilehandle 在某個module中添加:
'******************************************************
'
'寫入錯誤日志
'
'******************************************************
public sub writeerrlogfile(byval strsub as string, byval strerr as string) print #interrlogfilehandle, date, time, strsub, strerr end sub 在每個過程或自定義的函數中,使用如下的系統錯誤捕獲機制: public function forexample(…………) as long on error goto funcerror forexample=true ……………………… ……………………… exit function funcerror: forexample=false writeerrlogfile " forexample ", "錯誤號:" & err.number & ",錯誤源:" & err.source & ",錯誤描述:" & err.description msgbox "……… ", vbcritical
'在此作內存資源回收工作 end function
新聞熱點
疑難解答