為了理解應用程序開發過程,先要理解 Visual Basic 賴以創建的一些關鍵概念。因為 Visual Basic 是 Windows 開發語言,所以有必要與 Windows 環境保持一定的相似性。如果不熟悉 Windows 編程,就需要明白在 Windows環境下編程和在其它環境下編程的一些根本性的差別。
Windows 的工作方式:窗口、事件和消息
全面地討論 Windows 的內部工作機制將需要整整一本書的容量。沒有必要深入了解所有的技術細節。Windows 的工作機制,簡單地說就是三個關鍵的概念:窗口、事件和消息。
不妨簡單地將窗口看作帶有邊界的矩形區域。也許已經了解幾種不同類型的窗口:如,Windows 95 的“資源管理器”窗口、文字處理程序中的文檔窗口或者彈出提示有約會信息的對話框。除了這些最普通的窗口外,實際上還有許多其它類型的窗口。命令按鈕是一個窗口。圖標、文本框、選項按鈕和菜單條也都是窗口。
Microsoft Windows 操作系統通過給每一個窗口指定一個唯一的標識號(窗口句柄或 hWnd)來管理所有的窗口。操作系統連續地監視每一個窗口的活動或事件的信號。事件可以通過諸如單擊鼠標或按下按鍵的操作而產生,也可以通過程序的控制而產生,甚至可以由另一個窗口的操作而產生。
每發生一次事件,將引發一條消息發送至操作系統。操作系統處理該消息並廣播給其它窗口。然後,每一個窗口才能根據自身處理該條消息的指令而采取適當的操作(例如,當窗口解除了其它窗口的覆蓋時,重顯自身窗口)。
可以想像,處理各種窗口、事件和消息的所有可能的組合將有驚人的工作量。幸運的是,Visual Basic 使您擺脫了所有的低層消息處理。許多消息由Visual Basic 自動處理了,其它的作為事件過程由編程者自行處理。這樣可以快速創建強大的應用程序而毋需處理不必要的細節。
事件驅動模型
在傳統的或“過程化”的應用程序中,應用程序自身控制了執行哪一部分代碼和按何種順序執行代碼。從第一行代碼執行程序並按應用程序中預定的路徑執行,必要時調用過程。
在事件驅動的應用程序中,代碼不是按照預定的路徑執行,而是在響應不同的事件時執行不同的代碼片段。事件可以由用戶操作觸發,也可以由來自操作系統或其它應用程序的消息觸發,甚至由應用程序本身的消息觸發。這些事件的順序決定了代碼執行的順序,因此應用程序每次運行時所經過的代碼的路徑都是不同的。
因為事件的順序是無法預測的,所以在代碼中必須對執行時的“各種狀態”作一定的假設。當作出某些假設時(例如,假設在運行來處理某一輸入字段的過程之前,該輸入字段必須包含確定的值),應該組織好應用程序的結構,以確保該假設始終有效(例如,在輸入字段中有值之前禁止使用啟動該處理過程的命令按鈕)。
在執行中代碼也可以觸發事件。例如,在程序中改變文本框中的文本將引發文本框的 Change 事件。如果 Change 事件中包含有代碼,則將導致該代碼的執行。如果原來假設該事件僅能由用戶的交互操作所觸發,則可能會產生意料之外的結果。正因為這一原因,所以在設計應用程序時理解事件驅動模型並牢記在心是非常重要的。
交互式開發
傳統的應用程序開發過程可以分為三個明顯的步驟:編碼、編譯和測試代碼。但是 Visual Basic 與傳統的語言不同,它使用交互式方法開發應用程序,使三個步驟之間不再有明顯的界限。
在大多數語言裡,如果編寫代碼時發生了錯誤,則在開始編譯應用程序時該錯誤就會被編譯器捕獲。此時必須查找並改正該錯誤,然後再次進行編譯,對每一個發現的錯誤都要重復這樣的過程。Visual Basic 在編程者輸入代碼時便進行解釋,即時捕獲並突出顯示大多數語法或拼寫錯誤。看起來就像一位專家在監視代碼的輸入。
除即時捕獲錯誤以外,Visual Basic 也在輸入代碼時部分地編譯該代碼。當准備運行和測試應用程序時,只需極短時間即可完成編譯。如果編譯器發現了錯誤,則將錯誤突出顯示於代碼中。這時可以更正錯誤並繼續編譯,而不需從頭開始。
由於 Visual Basic 的交互特性,因此可以發現在開發應用程序時,您自己正頻繁地運行著您的應用程序。通過這種方式,代碼運行的效果可以在開發時進行測試,而不必等到編譯完成以後。