2012-03-02 53 views
1

我在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秒的時間間隔時,定時器事件仍然得到了執行。 此代碼除主表單外還有其他形式。

+0

定時器是否在主窗體中? – Motes 2012-03-02 14:25:39

+0

如果計時器位於另一個表單上,您能向我們展示您的完整代碼,包括對其他表單的引用嗎? – Deanna 2012-03-02 14:27:11

+1

哦,最好在QueryUnload()事件中執行此操作,以捕獲用戶單擊X等。 – Deanna 2012-03-02 14:27:52

回答

0

如果定時器在卸載表單後觸發,則某些操作會導致表單重新加載,或者存在加載表單的兩個實例。

對於第一種情況,請嘗試在事件中添加一個斷點,然後單步執行卸載代碼以查看觸發它的是什麼。

對於第二種情況,請確保您使用表格的隱式「遊戲」全局引用,或創建使用明確的本地引用來保存加載的表單。我希望你仍然使用隱式的全局引用。

1

在父窗體卸載後觸發的定時器是VB6中的常見問題。 WM_TIMER消息可以在您的VB6代碼運行時分派,卸載表單。這導致事件晚了起來。在表單級聲明一個私有布爾值mbIsLoaded。將其分配給True的和FalseForm_Unload。在您的計時器事件處理程序中,將其作爲您的第一行代碼:If mbIsLoaded Then Exit Sub

+0

優秀的建議。在卸載表單之前,請考慮[停止所有計時器](https://stackoverflow.com/questions/41446618/vb6-killing-timers)。 – 2017-08-13 01:33:05