公司軟件部VB組代碼撰寫暫行約定probezy(轉貼) 出處 http://www.vbprobe.com
一、變量和對象
程序中的變量遵循匈牙利表示法,即“前綴+變量含義”,變量的含義為一個或多個英文單詞,每個單詞的第一個字母大寫,不要用漢語拼音代替。變量前綴為三個小寫字母示意其類型,所需添加的前綴遵循微軟在MSDN中的建議。列表如下:
基本數據類型
變量類型前綴示例 BooleanblnblnFound BytebytbytRasterData Collection objectcolcolWidgets CurrencycurcurRevenue Date (Time)dtmdtmStart DoubledbldblTolerance ErrorerrerrOrderNum IntegerintintQuantity LonglnglngDistance ObjectobjobjCurrent SinglesngsngAverage StringstrstrFName User-defined typeudtudtEmployee VariantvntvntCheckSum
控件或窗體、模塊對象
控件類型前綴示例 3D PanelpnlpnlGroup ADO DataadoadoBiblio Animated buttonanianiMailBox Check boxchkchkReadOnly Combo box, drop-down list box cbocboEnglish Command buttoncmdcmdExit Common dialogdlgdlgFileOpen CommunicationscomcomFax Control (在過程中使用的類型未明的控件變量) ctrctrCurrent DatadatdatBiblio Data-bound combo boxdbcbodbcboLanguage Data-bound griddbgrddbgrdQueryResult Data-bound list boxdblstdblstJobType Data combodbcdbcAuthor Data griddgddgdTitles Data listdbldblPublisher Data repeaterdrpdrpLocation Date pickerdtpdtpPublished Directory list boxdirdirSource Drive list boxdrvdrvTarget File list boxfilfilSource Flat scroll barfsbfsbMove FormfrmfrmEntry FramefrafraLanguage Gaugegau gauStatus GraphgragraRevenue GridgrdgrdPrices Hierarchical flexgridflexflexOrders Horizontal scroll barhsbhsbVolume ImageimgimgIcon Image comboimgcbo imgcboProduct ImageListils ilsAllIcons Labellbl lblHelpMessageLightweight check box lwchklwchkArchive Lightweight combo box lwcbolwcboGerman Lightweight command button lwcmd Month view mvwmvwPeriod MS ChartchchSalesbyRegion MS Flex gridmsgmsgClients MS TabmstmstFirst OLE containeroleoleWorksheet Option buttonoptoptGender Picture boxpicpicVGA Picture clipclpclpToolbar ProgressBarprgprgLoadFile Remote DatardrdTitles RichTextBoxrtfrtfReport ShapeshpshpCircle SlidersldsldScale SpinspnspnPages StatusBarstastaDateTime SysInfosyssysMonitor TabStriptabtabOptions Text box txttxtLastName TimertmrtmrAlarm ToolbartlbtlbActions TreeViewtretreOrganization UpDownupdupdDirection Vertical scroll barvsbvsbRate
數據庫對象
數據庫對象前綴示例 ContainerconconReports DatabasedbdbAccounts DBEnginedbedbeJet DocumentdocdocSalesReport FieldfldfldAddress GroupgrpgrpFinance IndexixidxAge ParameterprmprmJobCode QueryDef qry qrySalesByRegion RecordsetrecrecForecast RelationrelrelEmployeeDept TableDeftbdtbdCustomers UserusrusrNew WorkspacewspwspMine
除此之外,還要對于一些不同的級別的變量加額外的前綴,舉例如下:
級別前綴示例 全局變量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
|