公司軟體部VB組代碼撰寫暫行約定 probezy(轉貼)

來源:互聯網
上載者: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



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。