VB程式設計中的一些經驗 (轉)

worldblog發表於2007-12-12
VB程式設計中的一些經驗 (轉)[@more@]

VB中的一些

1. 假設VB中有如下的變數宣告:
 dim s1, s2 as string
則s1是一個variant型變數,而s2是一個string型變數
如果想要宣告兩個string變數s1和s2
應該用:
 dim s1 as string, s2 as string

2. VB中的是自動回收的,類似
在一個過程中
sub Foo()
 dim obj as new
 .... 'do something with obj
end sub
過程結束的時候沒有必要 set obj = nothing
因為當離開該過程的時候,區域性變數obj消失,因此對Object物件例項的引用也就消失(除非在過程內部有其他的全域性變數引用了該物件的例項),所以物件例項會自動釋放

但是對於模組級的物件變數,new了一個例項後用完了必須set obj = nothing來釋放該例項

3. 對物件變數賦值應該用 set obj = AnOtherObj 這種方式,相當於讓obj指向AnOtherObj所指向的物件。VB中的物件變數實質上是一個指向物件例項的指標,這點和java,pascal相同,和C++中不同

4. VB中字串的內部格式是Unicode,它可以自動轉化為ANSI字元(單位元組字元)或者 CS 字元(雙位元組字元)。例如
  dim s1 as string, s2 as string
  s1 = "中文"
  s2 = left(s1, 1)
 
  則得到的實際上是  s2 = "中"
  因為VB會自動將s1內部unicode的"中"字單作一個DBCS字元取出來傳給s2
 
  因此處理雙位元組字元的時候特別要注意,很容易產生陣列錯誤

  VB中的常用字串處理,例如Asc, Left, Mid...都會自動判斷處理的字串中的每個字元是單位元組還是雙位元組(因為字串在內部以Unicode儲存,所以這一點很容易做到),然後自動轉化為ANSI字元或DBCS字元。

 
5. 字串的比較應該是用 strCmp 函式,而不是簡單的用 = 號
  StrComp(string1, string2[, compare])

其中引數compare的取值含義如下:
 常量  值  含義
 vbUseCompareOption  -1  根據Option Compare 語句的設定進行字串比較
 vbBinaryCompare  0  進行二進位制比較,也就是將string1和string2中的unicode字元看作陣列進行字典序比較
 vbTextCompare  1  進行文字比較
 vbDatabaseCompare  2  這個選項只適用於 Access,根據的設定進行比較


對於英文字串進行 vbTextCompare 比較時,不區分字母大小寫,例如: "a" 與 "A" 相等;
對於中文或其他雙位元組字串進行 vbTextCompare 比較時,不區分全形字元和半形字元,例如 "A", "A", "a", "a" 都相等;

6. VB中字串處理的函式有三種版本:
 (1) ANSI和DBCS版本,一般的字串函式(例如Mid(), Left(), ... )都是該版本,該版本的函式可以自動識別ANSI字元和DBCS字元,而且無論是ANSI字元還是DBCS字元都當作一個字元處理(雖然一個DBCS字元是兩個位元組,但還是當作一個字元處理)

 (2) 二進位制版本,這個版本的函式是在第一類函式的名稱後面加上B, 例如 MidB(), LeftB()……;這個版本的函式將字串當作位元組陣列處理,例如 s = "abc", k = LenB(s) , 則 k=6,因為字串在VB內部以unicode儲存,而一個unicode字元佔兩個位元組,所以s實際上佔用了2*3=6個位元組的空間,於是LenB(s)返回6

 (3) Unicode版本,這個版本的函式是在第一類函式名稱後面加上W,例如AscW, ChrW;這個版本的函式將字串當作unicode處理。

 函式  功能描述
 Asc  Returns the ANSI or DBCS character code for the first character of a string.
 AscB  Returns the value of the first byte in the given string containing binary data.
 AscW  Returns the Unicode character code for the first character of a string.
 Chr  Returns a string containing a specific ANSI or DBCS character code.
 ChrB  Returns a binary string containing a specific byte.
 ChrW  Returns a string containing a specific Unicode character code.
 Input  Returns a specified number of ANSI or DBCS characters from a file.
 InputB  Returns a specified number of bytes from a file.
 InStr  Returns the first occurrence of one string within another.
 InStrB  Returns the first occurrence of a byte in a binary string.
 Left,Right  Returns a specified number of characters from the right or left ss of a string.
 LeftB, RightB  Returns a specified number of bytes from the left or right side of a binary string.
 Len  Returns the length of the string in number of characters.
 LenB  Returns the length of the string in number of bytes.
 Mid  Returns a specified number of characters from a string.
 MidB  Returns the specified number of bytes from a binary string.


7. VB程式碼中的以下識別符號不能含有雙位元組字元:
Public procedure names  公共過程名稱
Public variables 公共變數
Public constants 公共常量
Project name (as specified in the Project Properties dialog box) 工程名稱(在工程屬性對話方塊中的名字) [PS: VB中文版中的工程名稱可以是中文,比較奇怪的說]
Class names (Name property of a class module, a user control, a property page, or a user document)  類名(類模組、模組,屬性頁,使用者文件的name屬性)


換句話說,其他的識別符號都可以用中文,例如:
Private Sub cmdTest_Click()
  Dim 中文變數 As String
  中文變數 = "你好! hello!"
  MsgBox 中文變數
End Sub

這樣的程式碼也是合法的 :-)


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

相關文章