作者fumizuki (小獅)
看板Visual_Basic
標題VB6 程式架構
時間Sun Apr 3 17:37:55 2005
★ 程式執行的開始點
程式的執行一定會有一個開始點(啟動物件),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
1F:推 JJss:優良文章 ^_^b 220.134.24.9 04/03