VB6 程式架構
★ 程式執行的開始點
程式的執行一定會有一個開始點(啟動物件),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
220.134.24.9 04/03, 1F
Visual_Basic 近期熱門文章
PTT數位生活區 即時熱門文章