VB6 程式架構

看板Visual_Basic作者 (小獅)時間19年前 (2005/04/03 16:22), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
★ 程式執行的開始點 程式的執行一定會有一個開始點(啟動物件),vb 預設的開始點為表單(Form)。 建立一個標準執行檔專案後,專案內會包含一個表單, 並自動命名為 Form1,此專案的開始點則設為 Form1。 除了表單之外,vb 也允許開始點為一個 Sub Main()。(main的大小寫沒差) Q: Sub Main() 該放在哪呢? A: Sub Main() 要自行輸入在一般模組中。 建立方法 → 專案功能表 → 新增模組 → 在模組的程式碼視窗中輸入 Sub Main() '要執行的程式碼 xxx End Sub ★ 程式運行的過程 ┌→ Sub Main() → 執行 xxx ────→ 結束 │ (End Sub) │ 啟動 ┤ │ │ (End Sub) └→ 載入表單 ────→ 控制權轉給表單 → 表單被載出 → 結束 也就是說,只要有一個 Sub 程序還在運行中,程式就不會結束,不會離開記憶體。 這時 vb 有提供 End 陳述式來終止程式的執行,在需要的時候可使用此陳述式直接終止 程式的執行。 但是此陳述式相當於電腦直接按下電源關閉一樣,非正常結束工作,可能會發生一些錯 誤,所以不建議使用 End 陳述式來終止程式的執行。 那麼,除了 End 陳述式外還有一個 Unload 陳述式,Unload 的用途是將一個物件載出 記憶體,物件可為表單、動態控制項、或其它動態新增的物件等。當下達 Unload 命令 時,會觸發 Unload 事件,執行一些載出前必要的動作後,才離開記憶體。當記憶體中 不再有任何物件及程序時,執行檔才會完全結束工作,離開記憶體。 ★ 安全結束程式的技巧: 1. 結束程式時,要求載出所有表單物件。 For Each e In Forms Unload e Next 2. 使用 Timer 控制項,在結束時啟動 Timer(Timer1.Enabled = True),由 Timer 的 事件去自動關閉所有物件。 3. 善用 Error 處理程序,避免發生不可預知的意外狀況。 4. 結束忙碌中程序的方法,使用共用變數通知該程序結束工作。 Dim Quit As Boolean, Busy As Boolean Private Sub Command1_Click() Busy = True Do 執行敘述 If Quit Then Exit Do Loop Until 條件成立 If Quit Then Unload Me Busy = False End Sub Private Sub Command2_Click() If Busy Then Quit = True Else Unload Me End Sub ★ 表單模組、一般模組與物件類別模組 vb 標準執行檔專案的預設是表單模組,也就是 Form1, Form2, ... 等等。 表單模組的副檔名為 frm。 一般模組的副檔名為 bas。(同 QBasic 的副檔名) (Sub Main 就放在此處) 新增一般模組的方法:專案功能表 → 新增模組 右方的專案總管視窗就會多出一個模組圖示,「Module1 (Module)」。 物件類別模組的副檔名為 cls。 新增的方法:專案功能表 → 新增物件類別模組 「Class1 (Class)」 所有 Sub、Function、變數 預設都是私有的(Private) 例如: Dim x As Integer '私有變數 Private y As Integer '私有變數 Public z As Integer '共有變數 表單及物件類別的變數、程序,欲在其它模組中引用,必須要加上模組名稱。 一般模組則不用,但如果有重覆名稱,一樣必須加上模組名稱。 範例1: ' Form1: Public count As Integer ' Module1: Public orz As Integer, xd As Boolean Sub Main() Msgbox "你共輸入了 " & form1.count & " 個字" Msgbox "你共買了 " & class1.count & " 本書" Msgbox "一號 Orz 等於 " & Module1.orz ' Module1可省略 Msgbox "二號 Orz 等於 " & Module2.orz ' Module2不可省略 Msgbox "艾克斯滴 等於 " & xd End Sub ' Module2: Public orz As Integer ' Class1: Public count As Long 範例2:( 啟動物件為Sub Main() ) ' Form1: Public i As Integer Sub Command1_Click() Debug.Print i '輸出結果為 0 Debug.Print Module1.i '輸出結果為 7 Form1.i = Module1.i * 2 Debug.Print i '輸出結果為 14 Debug.Print Module1.i '輸出結果為 7 End Sub 'Module1: Public i As Integer Sub Main() '程式進入點 i = 7 Form1.Show '控制權轉給表單 End Sub ※ 說的不完善或辭不達意的地方,請多見諒。 ... 冏rz -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.58.156.43

220.134.24.9 04/03, , 1F
優良文章 ^_^b
220.134.24.9 04/03, 1F
文章代碼(AID): #12JwVNmv (Visual_Basic)
文章代碼(AID): #12JwVNmv (Visual_Basic)