公司軟體部VB組代碼撰寫暫行約定 probezy(轉貼)
最後更新:2017-02-28
來源:互聯網
上載者:User
公司軟體部VB組代碼撰寫暫行約定 probezy(轉貼)
出處 http://www.vbprobe.com
一、變數和對象
程式中的變數遵循匈牙利標記法,即“首碼+變數含義”,變數的含義為一個或多個英文單詞,每個單詞的第一個字母大寫,不要用漢語拼音代替。變數首碼為三個小寫字母示意其類型,所需添加的首碼遵循微軟在MSDN中的建議。列表如下:
基礎資料型別 (Elementary Data Type)
變數類型 首碼 樣本
Boolean bln blnFound
Byte byt bytRasterData
Collection object col colWidgets
Currency cur curRevenue
Date (Time) dtm dtmStart
Double dbl dblTolerance
Error err errOrderNum
Integer int intQuantity
Long lng lngDistance
Object obj objCurrent
Single sng sngAverage
String str strFName
User-defined type udt udtEmployee
Variant vnt vntCheckSum
控制項或表單、模組對象
控制項類型 首碼 樣本
3D Panel pnl pnlGroup
ADO Data ado adoBiblio
Animated button ani aniMailBox
Check box chk chkReadOnly
Combo box, drop-down list box cbo cboEnglish
Command button cmd cmdExit
Common dialog dlg dlgFileOpen
Communications com comFax
Control (在過程中使用的類型未明的控制項變數)
ctr ctrCurrent
Data dat datBiblio
Data-bound combo box dbcbo dbcboLanguage
Data-bound grid dbgrd dbgrdQueryResult
Data-bound list box dblst dblstJobType
Data combo dbc dbcAuthor
Data grid dgd dgdTitles
Data list dbl dblPublisher
Data repeater drp drpLocation
Date picker dtp dtpPublished
Directory list box dir dirSource
Drive list box drv drvTarget
File list box fil filSource
Flat scroll bar fsb fsbMove
Form frm frmEntry
Frame fra fraLanguage
Gauge gau gauStatus
Graph gra graRevenue
Grid grd grdPrices
Hierarchical flexgrid flex flexOrders
Horizontal scroll bar hsb hsbVolume
Image img imgIcon
Image combo imgcbo
imgcboProduct ImageList ils
ilsAllIcons Label lbl
lblHelpMessage Lightweight check box
lwchk lwchkArchive Lightweight combo box
lwcbo lwcboGerman
Lightweight command button
lwcmd Month view
mvw mvwPeriod
MS Chart ch chSalesbyRegion
MS Flex grid msg msgClients
MS Tab mst mstFirst
OLE container ole oleWorksheet
Option button opt optGender
Picture box pic picVGA
Picture clip clp clpToolbar
ProgressBar prg prgLoadFile
Remote Data rd rdTitles
RichTextBox rtf rtfReport
Shape shp shpCircle
Slider sld sldScale
Spin spn spnPages
StatusBar sta staDateTime
SysInfo sys sysMonitor
TabStrip tab tabOptions
Text box txt txtLastName
Timer tmr tmrAlarm
Toolbar tlb tlbActions
TreeView tre treOrganization
UpDown upd updDirection
Vertical scroll bar vsb vsbRate
資料庫物件
資料庫物件 首碼 樣本
Container con conReports
Database db dbAccounts
DBEngine dbe dbeJet Document doc docSalesReport
Field fld fldAddress
Group grp grpFinance
Index ix idxAge
Parameter prm prmJobCode
QueryDef qry qrySalesByRegion
Recordset rec recForecast
Relation rel relEmployeeDept
TableDef tbd tbdCustomers
User usr usrNew
Workspace wsp wspMine
除此之外,還要對於一些不同的層級的變數加額外的首碼,舉例如下:
層級 首碼 樣本
全域變數 g ty
對於使用者使用type關鍵字定義的資料類型,在三個字母的首碼前再加u。例如:一個使用者定義的叫Client類型的變數,其首碼為ucli。
關於變數使用方面,建議如下:
1、變數要先聲明再使用(在表單代碼的第一行加上Option Explicit,來禁止未聲明變數的調用,或者在菜單Tools->Options->Editor中選中Require Variable Declaration項。)
2、盡量使用Long型的變數來代替Integer類型,這樣做可以減少一些資料溢出的錯誤,而且,在Win32平台上,CPU處理32位的資料比16位的資料速度更快。
3、盡量少用Variant變數,儘可能地給出每一個變數明確的類型
4、盡量不在API聲明中使用As Any,如果遇到其預設的參數為As Any的情況,則針對每一個所需的參數型別宣告該API函數,例如ReadFile函數預設的聲明為:
Public Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
小組成員須將其改為:
Public Declare Function ReadFileByt Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Byte, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
Public Declare Function ReadFileInt Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Integer, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
Public Declare Function ReadFileLng Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Long, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
5、不要將類型轉換的工作交給VB自動去做,而使用以下類型轉換函式
CBool(expression)
CByte(expression)
CCur(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CSng(expression)
CStr(expression)
CVar(expression)
二、表單布局
表單內各個控制項的布局,建議如下:
1、所有與表單上、下、左、右四條邊界相鄰的控制項與表單的邊緣相距120緹
2、各個控制項之間的間距為:相關控制項60緹,非相關控制項120緹
3、按鈕控制項大小建議為高300緹,長1200緹,這也是作業系統預設按鈕的大小
4、各個控制項的字型建議為宋體五號字
三、代碼
1、程式的啟始物件
程式一率從Main()函數開始執行(選擇菜單View->Project Explorer,在工程視窗內右鍵點擊當前項目,選擇菜單“… Properties”->General,在Startup Object下拉框中選擇sub main)
2、代碼縮排與間距
每個單位的代碼縮排為一個TAB,非相關代碼留一行空白的間隔,例如:
Private Function GetMax(Byref lngArray() As Long) As Long
GetMax=0
Dim lngMax As Long
Dim lngCount as long
For lngCount =0 to Ubound(lngArray)
If lngArray (lngCount)>lngMax Then
lngMax=lngArray(lngCount)
End If
Next
End Function
3、註譯
程式的註譯越詳盡,越仔細越好。以下提及的,必須加註譯。
程式中聲明的每一個變數,能加上註譯最好,至少用來運算或者儲存關鍵資料的變數必須加上註譯。
對於每一段邏輯上實現某個準系統的幾句代碼,最好在其上一行加上簡單註譯。
對於每一個自訂的函數,不管大小都必須加上註譯,而且註譯的格式如下:
'******************************************************
'
'函數所實現的功能
'函數的參數1的含義:XXXXX
'函數的參數2的含義:XXXXX
'……
'函數傳回值所代表的錯誤資訊:XXXXX(函數儘可能聲明為Function,不要聲明為Sub,
'函數的傳回值為0表示執行成功,為其它值表示執行失敗)
'
'******************************************************
Public(Private) Function ForExample(……………………) As Long
'…………………………………………
End Function
4、錯誤處理(未定)
在Main()函數或主表單Load過程中添加如下代碼:
'******************************************************
'
'開啟錯誤記錄檔檔案,在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