開始編碼之前
在 Visual Basic 中創(chuàng)建應用程序的最重要的(又往往為人忽視的)部分是設計階段。需要為應用程序設計一個用戶界面,這是顯然的;但需要設計代碼的結構就不那么顯然了。構造應用程序的方法不同,可造成應用程序的性能及代碼的可維護性、可使用性不同。
Visual Basic 應用程序的代碼是用分層方式組織的。典型應用程序包括若干模塊:應用程序中每個窗體的窗體模塊、共享代碼的可選標準模塊以及可選的類模塊。 每個模塊包含若干含有代碼的過程:event過程、Sub子過程或Function過程,以及Property過程?! ∨卸ㄊ裁催^程屬于什么模塊,這與創(chuàng)建的應用程序的類型有一定關系。因為 Visual Basic 是基于對象的,所以,利用應用程序代表的對象來考慮應用程序?qū)⑹怯幸娴?。在這一章,示例應用程序 Vcr.vbp 的設計建立在盒式錄像機和電視機組成的對象基礎之上。VCR 應用程序包含兩個窗體模塊、一個標準模塊和兩個類模塊。可用“對象瀏覽器”來檢查工程的結構(圖5.2)。
VCR 應用程序的主窗體 (frmVCR) 是 VCR與電視屏幕組合的可視圖像(圖 5.3)。它包括幾個對象,這些對象以現(xiàn)實世界中的圖景為模型。一組命令按鈕(cmdPlay、cmdRecord 等等)模仿的是操作 VCR 的按鈕。軟件VCR 還包括時鐘 (lblTime)、通道指示器 (lblChannel)、功能指示器(shpPlay、shpRecord 等等)以及顯像管 (picTV)。Vcr.frm 窗體模塊包括所有這些對象的事件過程。
在很多情況中都存在著多個對象共享的重復過程。例如,“按下”“放像”、“倒帶”或“錄像”按鈕時就要求“暫停”和“停止”按鈕有效。最好創(chuàng)建一個共享的子過程,所有按鈕都可調(diào)用它,而不要在每個按鈕的 Click 事件過程中重復這段代碼。如果將來要修改這些子程序,則只在一個地方修改就可進行全部修改。標準模塊 Vcr.bas 包含各種共享過程。
VCR 的某些部分是不可視的,比如磁帶的輸送機置或錄制電視節(jié)目的邏輯便是如此。同樣,軟件 VCR 的一些功能沒有可視圖像。這些部分和功能是作為兩個類模塊 Recorder.cls 和 Tape.cls 實現(xiàn)的。clsRecorder 模塊包含啟動“錄像”進程的代碼;而 clsTape 模塊則包含控制“磁帶”方向和速度的代碼。這些模塊中所定義的類與窗體中的任何對象都沒有直接關系。因為它們是獨立的代碼模塊,所以不作任何修改就可輕輕松松重建一個錄音程序。
除了設計代碼結構之外,建立命名約定也是很重要的。按照缺省規(guī)定,VisualBasic 將工程的第一個窗體命名為 Form1,第二個窗體為 Form2,依此類推。如果應用程序中有幾個窗體,則最好賦予它們有含義的名字,以免在編寫或編輯代碼時出現(xiàn)混淆情況。在附錄 B“Visual Basic 編碼約定”中列舉了一些 Visual Basic 建議的命名約定。
在進一步了解對象和學習編寫代碼時,可參考 VCR 示例應用程序,查找有關各種編碼技巧的例子。
代碼編寫機制
在著手編寫代碼之前,了解 Visual Basic 編寫代碼的機制是很重要的。和任何編程語言一樣,Visual Basic 有自身的組織、編輯和格式化代碼規(guī)則。
代碼模塊
Visual Basic 的代碼存儲在模塊中。模塊有三種類型:窗體、標準和類。簡單的應用程序可以只有一個窗體,應用程序的所有代碼都駐留在窗體模塊中。而當應用程序龐大復雜時,就要另加窗體。最終可能會發(fā)現(xiàn)在幾個窗體中都有要執(zhí)行的公共代碼。因為不希望在兩個窗體中重復代碼,所以要創(chuàng)建一個獨立模塊,它包含實現(xiàn)公共代碼的過程。獨立模塊應為標準模塊。此后可以建立一個包含共享過程的模塊庫。
每個標準模塊、類模塊和窗體模塊都可包含:
聲明??蓪⒊?shù)、類型、變量和動態(tài)鏈接庫 (DLL) 過程的聲明放在窗體、類或標準模塊的模塊級。
過程。Sub、Function 或者 Property 過程包含可以作為單元來執(zhí)行的代碼片段。本章后面的“過程概述”一節(jié)中將討論這些內(nèi)容。
窗體模塊
窗體模塊(文件擴展名為 .FRM )是大多數(shù) Visual Basic 應用程序的基礎。窗體模塊可以包含處理事件的過程、通用過程以及變量、常數(shù)、類型和外部過程的窗體級聲明。如果要在文本編輯器中觀察窗體模塊,則還會看到窗體及其控件的描述,包括它們的屬性設置值。寫入窗體模塊的代碼是該窗體所屬的具體應用程序?qū)S玫?;它也可以引用該應用程序?nèi)的其它窗體或?qū)ο蟆?br>
標準模塊
標準模塊(文件擴展名為 .BAS)是應用程序內(nèi)其它模塊訪問的過程和聲明的容器。它們可以包含變量、常數(shù)、類型、外部過程和全局過程的全局(在整個應用程序范圍內(nèi)有效的)聲明或模塊級聲明。寫入標準模塊的代碼不必綁在特定的應用程序上;如果能夠注意不用名稱引用窗體和控件,則在許多不同的應用程序中可以重用標準模塊。
類模塊
在 Visual Basic 中類模塊(文件擴展名為 .CLS)是面向?qū)ο缶幊痰幕A??稍陬惸K中編寫代碼建立新對象。這些新對象可以包含自定義的屬性和方法。實際上,窗體正是這樣一種類模塊,在其上可安放控件,可顯示窗體窗口。
詳細信息 關于在類模塊中編寫代碼的更詳細的信息,請參閱第九章“用對象編程”。
注意 Visual Basic 的專業(yè)版和企業(yè)版也包含 ActiveX 文檔、ActiveX 設計器和用戶控件。它們引入了具有不同文件擴展名的新模塊類型。從編寫代碼的角度來看,這些模塊應視同為窗體模塊。
使用“代碼編輯器”
Visual Basic “代碼編輯器” 是一個窗口,大多數(shù)代碼都在此窗口上編寫。它像一個高度專門化的字處理軟件,有許多便于編寫 Visual Basic 代碼的功能。圖 5.4所示為“代碼編輯器”窗口。
因為要操作模塊中的 Visual Basic 代碼,所以要為每一個從“工程資源管理器”中選擇的模塊打開一個獨立的“代碼編輯器”窗口。在每個模塊中,對于模塊中所包含的每個對象,將模塊中的代碼再細分出與對象對應的獨立部分。用“對象列表框”實現(xiàn)各部分間的切換。 在窗體模塊中,該列表包含一個通用段,一個屬于窗體自身的段以及窗體所包含的每一控件的段。對于類模塊,列表包括一個通用段和一個類段;對于標準模塊,只有一個通用段被顯示。
每一段代碼都可包含幾個用“過程列表框”訪問的不同過程。對窗體或控件的每一個事件過程,窗體模塊的過程列表都包含一個獨立的段。例如,Label控件的過程列表就包含 Change 事件段、Click 事件段和 DblClick 事件段等等。類模塊只列舉類本身的事件過程——初始化和終止。標準模塊不列舉任何事件過程,因為標準模塊不支持事件。
模塊通用段的過程列表只包含唯一段——聲明段,其中放置模塊級的變量、常數(shù)和 DLL 聲明。當在模塊中添加子過程或函數(shù)過程時,那些過程被添加到聲明段下方的“過程列表框”中。
代碼的兩種不同視圖都可用于“代碼編輯器”窗口??梢砸淮沃徊榭匆粋€過程,也可以查看模塊中的所有過程,這些過程彼此之間用線隔開(如圖 5.4所示)。為了在兩個視圖之間進行切換,利用編輯器窗口左下角的“查看選擇”按鈕。
自動完成編碼
Visual Basic 能自動填充語句、屬性和參數(shù),這些性能使編寫代碼更加方便。在輸入代碼時,編輯器列舉適當?shù)倪x擇、語句或函數(shù)原型或值。通過“工具”菜單上的“選項”命令訪問“選項”對話框,在“選項”對話框的“編輯器”選項卡上可用這樣的選項,由它們決定是允許還是禁止各代碼的設置值。
在代碼中輸入一控件名時,“自動列出成員特性”會亮出這個控件的下拉式屬性表(圖 5.5)。鍵入屬性名的前幾個字母,就會從表中選中該名字,按 Tab鍵將完成這次輸入。當不能確認給定的控件有什么樣的屬性時,這個選項是非常有幫助的。即使選擇了禁止“自動列出成員特性”,仍可使用 CTRL +J 組合鍵得到這種性能。
“自動快速信息”功能顯示語句和函數(shù)的語法(圖 5.6)。當輸入合法的 VisualBasic 語句或函數(shù)名之后,語法立即顯示在當前行的下面,并用黑體字顯示它的第一個參數(shù)。在輸入第一個參數(shù)值之后,第二個參數(shù)又出現(xiàn)了,同樣也是黑體字。“自動快速信息”也可以用 CTRL+I 組合鍵得到。
書簽
在代碼編輯器中書簽可用來標記代碼的某些行,以便您以后可以很容易地返回這些行。書簽開關的切換以及定位到已有書簽的命令可以在編輯、書簽菜單項或編輯工具欄中得到。
詳細信息 關于如何使用組合鍵使用“代碼編輯器”窗口的各種功能的更詳細信息,請參閱“代碼窗口的快捷鍵”。
編碼基礎
這一部分介紹代碼編寫機制,包括如何中斷和合并代碼行、如何添加注釋、如何使用數(shù)字以及 Visual Basic 命名約定。
將單行語句分成多行
可以在“代碼”窗口中用續(xù)行符(一個空格后面跟一個下劃線)將長語句分成多行。由于使用續(xù)行符,無論在計算機上還是打印出來的代碼都變得易讀。下面用續(xù)行符 ( _) 將代碼分成若干行:
Data1.RecordSource = _
"SELECT * FROM Titles, Publishers" _
& "WHERE Publishers.PubId = Titles.PubID" _
& "AND Publishers.State = 'CA'"
在同一行內(nèi),續(xù)行符后面不能加注釋。至于在什么地方可以使用續(xù)行符,還是有某些限制的。
將多個語句合并到同一行上
通常,一行之中有一個 Visual Basic 語句,而沒有語句終結符,但是也可以將兩個或多個語句放在同一行,只是要用冒號 (:) 將它們分開。
Text1.Text = "Hello" : Red = 255 : Text1.BackColor =
Red
但是,為了便于閱讀代碼,最好還是一行放一個語句。
詳細信息 關于詳細信息,請參閱附錄 A“Visual Basic 的規(guī)范、限制和文件格式”。
在代碼中添加注釋
閱讀本手冊的例子時常會遇到注釋符 (')。這個符號告訴 Visual Basic,忽略該符號后面的內(nèi)容。這些內(nèi)容是代碼段中的注釋,既是為了方便開發(fā)者,也是為了方便以后可能檢查源代碼的其他程序員。例如:
' 這是從屏幕左邊
' 開始的注釋。
Text1.Text = "Hi!" '在文本框中放
'歡迎詞。
注釋可以和語句在同一行,并寫在語句的后面,也可占據(jù)一整行。上述代碼對這兩種情況都作了示范。記住,不能在同一行上將注釋接在續(xù)行符之后。
注意 您可以通過選中兩行或多行代碼并在“編輯”工具欄上通過選擇“注釋塊”或“刪除注釋塊”按鈕來對該代碼塊添加或刪除注釋符號。
理解數(shù)字系統(tǒng)
在本文檔中大多數(shù)的數(shù)值都是十進制的(基數(shù)為 10)。但有時用十六進制數(shù)(基數(shù)為 16)或八進制數(shù)(基數(shù)為 8)更方便。Visual Basic 用前綴 &H表示十六進制數(shù),而用 &O 表示八進制數(shù)。下表說明同一個數(shù)的十進制、八進制和十六進制表示。
通常不必掌握十六進制或八進制數(shù)制,因為計算機可以用任何數(shù)制的數(shù)工作。但是,對某些任務來說,有的數(shù)系就比其它數(shù)系更合適,例如利用十六進制數(shù)設置屏幕和控件的顏色。
Visual Basic 的命名約定
在編寫 Visual Basic 代碼時,要聲明和命名許多元素(Sub 和 Function 過程、變量、常數(shù)等等)。在 Visual Basic 代碼中聲明的過程、變量和常數(shù)的名字,必須遵循這些規(guī)則:
1.它們必須以字母開頭。
2.它們不可以包含嵌入的句號或者類型聲明字符(規(guī)定數(shù)據(jù)類型的特殊字符)。
3.它們不能超過255個字符??丶⒋绑w、類和模塊的名字不能超過40個字符。
4.它們不能和受到限制的關鍵字同名。
受到限制的關鍵字是 Visual Basic 使用的詞,是語言的組成部分。其中包括預定義語句(比如 If 和 Loop)、函數(shù)(比如 Len 和 Abs)和操作符(比如 Or 和 Mod)。
詳細信息 關于關鍵字表的更詳細信息,請參閱《Visual Basic 6.0語言參考手冊》。
窗體和控件可以和受到限制的關鍵字同名。例如,可以將某個控件命名為Loop。但在代碼中不能用通常的方法引用該控件,因為 Visual Basic 會認為 Loop 意味著關鍵字。例如,下面的代碼就會出錯。
Loop.Visible = True ' 出錯。
為了引用那些和受到限制的關鍵字同名的窗體或控件,就必須限定它們,或者將其用方括號 [ ] 括起來。例如,下面的代碼就不會出錯。
MyForm.Loop.Visible = True '用窗體名
'將其限定。
[Loop].Visible = True '方括號
'起了作用。
在引用窗體和控件時都可以用這種方式使用方括號,但在聲明變量或定義過程期間,當變量名或過程名與受到限制的關鍵字相同時,這種方式是不能使用的。方括號還可以用來強制 Visual Basic 接受其它類型庫提供的名稱,這些名稱與受到限制的關鍵字沖突。
注意 因為鍵入方括號也是令人厭倦的事情,所以希望少用受到限制的關鍵字作窗體或控件名。但是,如果Visual Basic的新版本定義了與現(xiàn)有窗體或控件沖突的新關鍵字,那么在為使用新版本而更新代碼時,可以使用這個技巧。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請
點擊舉報。