我在vb6得到一個代碼之後仍在運行:定時器卸載窗體
If KeyCode = vbKeyEscape Then
i = MsgBox("you want to quit?", 4)
If i = 6 Then
Timer1.Enabled = False
Unload Me
End If
End If
後的形式卸載並在10秒的時間間隔時,定時器事件仍然得到了執行。 此代碼除主表單外還有其他形式。
我在vb6得到一個代碼之後仍在運行:定時器卸載窗體
If KeyCode = vbKeyEscape Then
i = MsgBox("you want to quit?", 4)
If i = 6 Then
Timer1.Enabled = False
Unload Me
End If
End If
後的形式卸載並在10秒的時間間隔時,定時器事件仍然得到了執行。 此代碼除主表單外還有其他形式。
如果定時器在卸載表單後觸發,則某些操作會導致表單重新加載,或者存在加載表單的兩個實例。
對於第一種情況,請嘗試在事件中添加一個斷點,然後單步執行卸載代碼以查看觸發它的是什麼。
對於第二種情況,請確保您使用表格的隱式「遊戲」全局引用,或創建使用明確的本地引用來保存加載的表單。我希望你仍然使用隱式的全局引用。
在父窗體卸載後觸發的定時器是VB6中的常見問題。 WM_TIMER消息可以在您的VB6代碼運行時分派,卸載表單。這導致事件晚了起來。在表單級聲明一個私有布爾值mbIsLoaded
。將其分配給True
的和False
的Form_Unload
。在您的計時器事件處理程序中,將其作爲您的第一行代碼:If mbIsLoaded Then Exit Sub
。
優秀的建議。在卸載表單之前,請考慮[停止所有計時器](https://stackoverflow.com/questions/41446618/vb6-killing-timers)。 – 2017-08-13 01:33:05
定時器是否在主窗體中? – Motes 2012-03-02 14:25:39
如果計時器位於另一個表單上,您能向我們展示您的完整代碼,包括對其他表單的引用嗎? – Deanna 2012-03-02 14:27:11
哦,最好在QueryUnload()事件中執行此操作,以捕獲用戶單擊X等。 – Deanna 2012-03-02 14:27:52