作者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