開始編碼之前
在VisualBasic中創建應用程式的最重要的(又往往被忽視的)部分是設計階段。需要為應用程式設計一個使用者介面,這是顯然的;但需要設計程式碼的結構就不那麼顯然了。建構應用程式的方法不同,可造成應用程式的效能及程式碼的可維護性、可使用性不同。 VisualBasic應用程式的程式碼是用分層方式組織的。典型應用程式包括若干模組:應用程式中每個窗體的窗體模組、共享程式碼的可選標準模組以及可選的類別模組。每個模組包含若干含有程式碼的過程:event過程、Sub子過程或Function過程,以及PRoperty過程。 判定什麼過程屬於什麼模組,這與創建的應用程式的類型有一定關係。因為VisualBasic是基於物件的,所以,利用應用程式代表的物件來考慮應用程式將是有益的。在這一章,範例應用程式Vcr.vbp的設計建立在盒式錄影機和電視機組成的物件基礎之上。 VCR應用程式包含兩個窗體模組、一個標準模組和兩個類別模組。可用「物件瀏覽器」來檢查工程的結構(圖5.2)。
VCR應用程式的主視窗(frmVCR)是VCR與電視螢幕組合的可視圖像(圖5.3)。它包括幾個對象,這些對像以現實世界中的圖景為模型。一組指令按鈕(cmdPlay、cmdRecord等等)模仿的是操作VCR的按鈕。軟體VCR還包括時鐘(lblTime)、通道指示器(lblChannel)、功能指示器(shpPlay、shpRecord等等)以及顯像管(picTV)。 Vcr.frm窗體模組包含所有這些物件的事件過程。
在許多情況中都存在著多個物件共享的重複過程。例如,「按下」「放像」、「倒帶」或「錄影」按鈕時就要求「暫停」和「停止」按鈕有效。最好是建立一個共享的子過程,所有按鈕都可呼叫它,而不要在每個按鈕的Click事件過程中重複這段程式碼。如果將來要修改這些子程序,則只在一個地方修改就可進行全部修改。標準模組Vcr.bas包含各種共享流程。
VCR的某些部分是不可視的,例如磁帶的輸送機置或錄製電視節目的邏輯便是如此。同樣,軟體VCR的一些功能沒有可視圖像。這些部分和功能是作為兩個類別模組Recorder.cls和Tape.cls實現的。 clsRecorder模組包含啟動「錄影」程序的程式碼;而clsTape模組則包含控制「磁帶」方向和速度的程式碼。這些模組中所定義的類別與窗體中的任何物件都沒有直接關係。因為它們是獨立的程式碼模組,所以不作任何修改就可輕輕鬆松重建一個錄音程式。
除了設計程式碼結構之外,建立命名約定也是很重要的。依照預設規定,VisualBasic將工程的第一個窗體命名為Form1,第二個視窗為Form2,依此類推。如果應用程式中有幾個窗體,則最好賦予它們有意義的名字,以免在編寫或編輯程式碼時出現混淆情況。在附錄B「VisualBasic編碼約定」中列舉了一些VisualBasic建議的命名約定。
在進一步了解物件和學習編寫程式碼時,可參考VCR範例應用程序,尋找有關各種編碼技巧的範例。
程式碼編寫機制
在著手編寫程式碼之前,先了解VisualBasic編寫程式碼的機制是很重要的。和任何程式語言一樣,VisualBasic有自己的組織、編輯和格式化程式碼規則。
程式碼模組
VisualBasic的程式碼儲存在模組中。模組有三種類型:窗體、標準和類別。簡單的應用程式可以只有一個窗體,應用程式的所有程式碼都駐留在窗體模組中。而當應用程式龐大複雜時,就要另加窗體。最終可能會發現在幾個窗體中都有要執行的公共代碼。因為不希望在兩個窗體中重複程式碼,所以要建立一個獨立模組,它包含實作公共程式碼的過程。獨立模組應為標準模組。此後可以建立一個包含共享過程的模組庫。
每個標準模組、類別模組和窗體模組都可包含:
聲明。常數、類型、變數和動態連結庫(DLL)過程的宣告可放在窗體、類別或標準模組的模組級。
過程。 Sub、Function或Property過程包含可以作為單元執行的程式碼片段。本章後面的「流程概述」一節將討論這些內容。
窗體模組
窗體模組(檔案副檔名為.FRM)是大多數VisualBasic應用程式的基礎。窗體模組可以包含處理事件的過程、通用過程以及變數、常數、類型和外部過程的窗體級聲明。如果要在文字編輯器中觀察窗體模組,則也會看到窗體及其控制項的描述,包括它們的屬性設定值。寫入窗體模組的程式碼是該窗體所屬的特定應用程式專用的;它也可以引用該應用程式內的其它窗體或物件。
標準模組
標準模組(檔案副檔名為.BAS)是應用程式內其它模組存取的過程和聲明的容器。它們可以包含變數、常數、類型、外部過程和全域過程的全域(在整個應用程式範圍內有效的)聲明或模組級聲明。寫入標準模組的程式碼不必綁在特定的應用程式上;如果能夠注意不用名稱引用窗體和控件,則在許多不同的應用程式中可以重複使用標準模組。
類別模組
在VisualBasic中類別模組(檔案副檔名為.CLS)是物件導向程式設計的基礎。可在類別模組中編寫程式碼建立新物件。這些新物件可以包含自訂的屬性和方法。實際上,窗體正是這樣一種類別模組,在其上可安放控件,可顯示窗體視窗。
詳細資訊關於在類別模組中編寫程式碼的更詳細的信息,請參閱第九章「用物件程式設計」。
注意VisualBasic的專業版和企業版也包含ActiveX文件、ActiveX設計器和使用者控制項。它們引入了具有不同檔案副檔名的新模組類型。從編寫程式碼的角度來看,這些模組應視同為窗體模組。
使用“程式碼編輯器”
VisualBasic「程式碼編輯器」是一個窗口,大多數程式碼都在此窗口上編寫。它像是高度專門化的字處理軟體,有許多方便編寫VisualBasic程式碼的功能。圖5.4所示為「程式碼編輯器」視窗。
因為要操作模組中的VisualBasic程式碼,所以要為每一個從「工程資源管理器」中選擇的模組開啟一個獨立的「程式碼編輯器」視窗。在每個模組中,對於模組中所包含的每個對象,將模組中的程式碼再細分出與物件對應的獨立部分。用「物件列錶框」實現各部分間的切換。在窗體模組中,此清單包含一個通用段,一個屬於窗體本身的段以及窗體所包含的每一個控制項的段。對於類別模組,清單包括一個通用段和一個類別段;對於標準模組,只有一個通用段被顯示。
每一段程式碼可包含幾個以「流程列錶框」存取的不同過程。對窗體或控制項的每一個事件過程,窗體模組的過程清單都包含一個獨立的段。例如,Label控制項的流程清單就包含Change事件段、Click事件段和DblClick事件段等等。類別模組只列舉類別本身的事件過程-初始化和終止。標準模組不列舉任何事件過程,因為標準模組不支援事件。
模組通用段的過程清單只包含唯一段-宣告段,其中放置模組級的變數、常數和DLL宣告。當在模組中加入子過程或函數過程時,那些過程會被加入到宣告段下方的「過程列錶框」。
程式碼的兩種不同視圖都可用於「程式碼編輯器」視窗。可以一次只查看一個過程,也可以查看模組中的所有過程,這些過程彼此之間用線隔開(如圖5.4所示)。為了在兩個視圖之間進行切換,請利用編輯器視窗左下角的「檢視選擇」按鈕。
自動完成編碼
VisualBasic能自動填入語句、屬性和參數,這些效能讓編寫程式碼更方便。輸入程式碼時,編輯器會列舉適當的選擇、語句或函數原型或值。透過「工具」選單上的「選項」指令存取「選項」對話框,在「選項」對話框的「編輯器」標籤上可用這樣的選項,由它們決定是否允許或禁止各程式碼的設定值。
在程式碼中輸入一控件名稱時,「自動列出成員特性」會亮出這個控制項的下拉式屬性表(圖5.5)。鍵入屬性名的前幾個字母,就會從表格中選取該名字,按Tab鍵將完成此輸入。當不能確認給定的控制項有什麼樣的屬性時,這個選項是非常有幫助的。即使選擇了禁止“自動列出成員特性”,仍可使用CTRL J組合鍵得到這種性能。
「自動快速資訊」功能顯示語句和函數的語法(圖5.6)。當輸入合法的VisualBasic語句或函數名稱之後,語法立即顯示在目前行的下面,並用黑體字顯示它的第一個參數。在輸入第一個參數值之後,第二個參數又出現了,同樣也是黑體字。 「自動快速資訊」也可以用CTRL I組合鍵得到。
書籤
在程式碼編輯器中書籤可用來標記程式碼的某些行,以便您以後可以輕鬆地傳回這些行。書籤開關的切換以及定位到已有書籤的命令可以在編輯、書籤選單項目或編輯工具列中得到。
詳細資訊關於如何使用組合鍵使用“代碼編輯器”視窗的各種功能的更詳細信息,請參閱“代碼視窗的快捷鍵”。
編碼基礎
這一部分介紹程式碼編寫機制,包括如何中斷和合併程式碼行、如何新增註解、如何使用數字以及VisualBasic命名約定。
將單行語句分成多行
可以在「程式碼」視窗中用續行符(一個空格後面跟著一個底線)將長語句分成多行。由於使用續行符,無論在電腦上或列印出來的程式碼都變得易讀。下面用續行符號(_)將程式碼分成若干行:
Data1.RecordSource=_
SELECT*FROMTitles,Publishers_
&WHEREPublishers.PubId=Titles.PubID_
&ANDPublishers.State='CA'
在同一行內,續行符後面不能加註解。至於在什麼地方可以使用續行符,還是有某些限制的。
將多個語句合併到同一行上
通常,一行之中有一個VisualBasic語句,而沒有語句終結符,但是也可以將兩個或多個語句放在同一行,只是要用冒號(:)將它們分開。
Text1.Text=Hello:Red=255:Text1.BackColor=
Red
但是,為了方便閱讀程式碼,最好還是一行放一個語句。
詳細資訊關於詳細信息,請參閱附錄A“VisualBasic的規範、限制和文件格式”。
在程式碼中加入註釋
閱讀本手冊的例子時常會遇到註釋符(')。這個符號告訴VisualBasic,忽略該符號後面的內容。這些內容是程式碼片段中的註釋,既是為了方便開發者,也是為了方便以後可能檢查原始程式碼的其他程式設計師。例如:
'這是從螢幕左邊
'開始的註釋。
Text1.Text=Hi! '在文字方塊中放
'歡迎詞。
註解可以和語句在同一行,並寫在語句的後面,也可佔據一整行。上述程式碼對這兩種情況都作了示範。記住,不能在同一行上將註解接在續行符之後。
注意您可以透過選取兩行或多行程式碼並在「編輯」工具列上透過選擇「註解區塊」或「刪除註解區塊」按鈕來對該程式碼區塊新增或刪除註解符號。
理解數字系統
在本文檔中大多數的數值都是十進制的(基數為10)。但有時用十六進制數(基數為16)或八進制數(基數為8)會比較方便。 VisualBasic用前綴&H表示十六進位數,而用&O表示八進位數。下表說明同一個數的十進制、八進制和十六進位表示。
通常不必掌握十六進位或八進制數制,因為電腦可以用任何數制的數來工作。但是,對某些任務來說,有的數係就比其它數係更合適,例如利用十六進制數來設定螢幕和控制的顏色。
VisualBasic的命名約定
在編寫VisualBasic程式碼時,要宣告和命名許多元素(Sub和Function過程、變數、常數等等)。在VisualBasic程式碼中宣告的流程、變數和常數的名字,必須遵循這些規則:
1.它們必須以字母開頭。
2.它們不可以包含嵌入的句號或類型聲明字元(規定資料類型的特殊字元)。
3.它們不能超過255個字元。控制、窗體、類別和模組的名字不能超過40個字元。
4.它們不能和受到限制的關鍵字同名。
受到限制的關鍵字是VisualBasic使用的詞,是語言的組成部分。其中包括預定義語句(如If和Loop)、函數(如Len和Abs)和操作符(如Or和Mod)。
詳細資訊關於關鍵字表的更詳細信息,請參閱《VisualBasic6.0語言參考手冊》。
窗體和控制項可以和受限的關鍵字同名。例如,可以將某個控制項命名為Loop。但在程式碼中不能用通常的方法來引用該控件,因為VisualBasic會認為Loop意味著關鍵字。例如,下面的程式碼就會出錯。
Loop.Visible=True '出錯。
為了引用那些和受到限制的關鍵字同名的窗體或控件,就必須限定它們,或者將其用方括號[]括起來。例如,下面的程式碼就不會出錯。
MyForm.Loop.Visible=True '用窗體名
'將其限定。
[Loop].Visible=True '方括號
'起了作用。
在引用窗體和控制項時都可以用這種方式使用方括號,但在宣告變數或定義過程期間,當變數名稱或流程名稱與受限的關鍵字相同時,這種方式是不能使用的。方括號也可以用來強制VisualBasic接受其它類型庫提供的名稱,這些名稱與受到限制的關鍵字衝突。
注意因為鍵入方括號也是令人厭倦的事情,所以希望少用受限的關鍵字作窗體或控制項名稱。但是,如果VisualBasic的新版本定義了與現有窗體或控制項衝突的新關鍵字,那麼在為使用新版本更新程式碼時,可以使用這個技巧。 _
->