公司軟體部VB組程式碼撰寫暫行約定 (轉)

worldblog發表於2008-01-06
公司軟體部VB組程式碼撰寫暫行約定 (轉)[@more@]

  :namespace prefix = o />

一、變數和

  中的變數遵循匈牙利表示法,即“字首+變數含義”,變數的含義為一個或多個英文單詞,每個單詞的第一個字母大寫,不要用漢語拼音代替。變數字首為三個小寫字母示意其型別,所需新增的字首遵循在MSDN中的建議。列表如下:

 

  基本資料型別

變數型別

字首

示例

Boolean

bln

blnFound

Byte

byt

bytRasterData

Collection

col

colWidgets

Currency

cur

curRevenue

Date (Time)

dtm

dtmStart

Double

l

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

aniBox

Check box

chk

chkReadOnly

Combo box, drop-down list box

cbo

cboEnglish

Command button

cmd

cmdExit

Common dialog

dlg

dlgFileOpen

Communications

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

dir

Drive list box

drv

drvTarget

File list box

fil

filSource

Flat scroll bar

fsb

fsbMove

Fo

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

lwcmdRemove

Lightweight frame

lwfra

lwfraSaveOptions

Lightweight horizontal scroll bar

lwhsb

lwhsbVolume

Lightweight list box

lwlst

lwlstCostCenters

Lightweight option button

lwopt

lwoptIncomeLevel

Lightweight text box

lwtxt

lwoptStreet

Lightweight vertical scroll bar

lwvsb

lwvsbYear

Line

lin

linVertical

List box

lst

lstPolicyCodes

ListView

lvw

lvwHeadings

M message

mpm

mpmSentMessage

MAPI session

mps

mpsSession

MCI

mci

mciVo

Menu

mnu

mnuFileOpen

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 cl

clp

clpToolbar

ProgressBar

prg

prgLoadFile

Remote Data

rd

rdTitles

RichTextBox

rtf

rtfReport

Shape

shp

shpCircle

Slider

sld

sldScale

Spin

spn

spnPages

Statar

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

ccounts

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

gstrUserName

模組級變數

m

mblnCalcInProgress

過程級變數

None

dblVelocity

 

  對於使用type關鍵字定義的資料型別,在三個字母的字首前再加u。例如:一個使用者定義的叫Client型別的變數,其字首為ucli。

 

  關於變數使用方面,建議如下:

1、變數要先宣告再使用(在窗體程式碼的第一行加上Option Explicit,來禁止未宣告變數的,或者在選單Tools->Options->Editor中選中Require Variable Declaration項。)

2、儘量使用Long型的變數來代替Integer型別,這樣做可以減少一些資料的錯誤,而且,在平臺上,處理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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996740/,如需轉載,請註明出處,否則將追究法律責任。

相關文章