2012-03-02 2 views
1

アンロードした後に実行されている:アンロード形式と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 

を、タイマーイベントがまだ実行されてしまいました。 このコードはメインフォームの他に別の形式です。

+0

タイマーはメインフォームですか? – Motes

+0

タイマーが別のフォームにある場合は、他のフォームへの参照を含む完全なコードを表示できますか? – Deanna

+1

ああ、これをQueryUnload()イベントで実行して、Xなどをクリックするユーザーを捕まえる方が良いです。 – Deanna

答えて

0

フォームをアンロードした後にタイマーが起動した場合は、何かがフォームをリロードする原因になっています。または、フォームが2つロードされています。

最初のケースでは、イベントにブレークポイントを追加し、アンロードコードを1回踏んで何がトリガーされているかを確認してください。

2番目のケースでは、フォームの暗黙的な "ゲーム"グローバル参照を使用することを確認してください。また、明示的なローカル参照を使用してロードされたフォームを保持してください。私は暗黙のグローバル参照を使用してあなたのまだ期待しています。

1

親フォームがアンロードされた後に起動するタイマーは、VB6でよく発生する問題です。フォームをアンロードするVB6コードの実行中に、WM_TIMERメッセージを送出できます。これにより、イベントが遅くになってしまいます。フォームレベルでプライベートブールmbIsLoadedを宣言します。 に、FalseForm_Unloadを割り当ててください。タイマーイベントハンドラでこれをコードの最初の行にします:If mbIsLoaded Then Exit Sub

+0

優れた提案。フォームをアンロードする前に、そのフォームの[すべてのタイマーを停止する](https://stackoverflow.com/questions/41446618/vb6-killing-timers)も検討してください。 –

関連する問題