プログラムが終了しません。

解決


初心者プログラマ  2004-06-24 13:49:05  No: 114215  IP: [192.*.*.*]

プログラムが終了しなくて困っています。
(Formは1〜4の4個、Moduleは1個です。)

Form1で・・・

Private Sub CmdEnd_Click()
    Dim ans%
    ans = MsgBox("プログラムを終了しますか?", vbYesNo + vbQuestion, "終了")
    Select Case ans
        Case vbYes
            Unload Form2
            Unload Form3
            Unload Form4
            Unload Me           '←←←☆
        Case vbNo
    End Select
End Sub

としているのですが、
プログラムをスタートして何も実行せずすぐに
Form1で終了(CmdEndをクリック)した場合は
ちゃんと終了できるのですが、
すべてのFormを動かしたあとになると
なぜか終了しません。
(でも画面は全部消えるのです)
exeを作って動かすと、プログラムが画面上から消えた後も
タスクマネージャで確認すると残っているのです。

何が起きているのかを確認(デバック)したいのですが、
どうしたら、いいのでしょうか?
ブレークポイントを"☆"のところに置いてみたりしたのですが
よくわかりません。

教えてください。
よろしくお願いします。

編集 削除
特攻隊長まるるう  2004-06-24 14:22:16  No: 114216  IP: [192.*.*.*]

これだけだとよく分かりませんが(^^;)
フォームがちゃんとロード、アンロードされてるか
どうかに疑問が残るなら、全てのフォームに
[VB6.0]
Private Sub Form_Load()
    Debug.Print Me.Name & " Load: " & Me.hWnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Debug.Print Me.Name & " Unload: " & Me.hWnd
End Sub

って書いてデバッグすればいいんじゃないですか?。

編集 削除
うにぃ  2004-06-24 14:25:40  No: 114217  IP: [192.*.*.*]

あげれらたソースだけではなんともいえないですね。
画面以外に何かメモリに残っていませんか?
たとえば、モジュール(またはパブリック)レベルの変数にセットされたオブジェクトを開放していないだとか。

あとは
http://www.gj.il24.net/~nakasima/
の「プログラムがきちんと終了しない理由」を参考にしてみるのもいいかもしれません

編集 削除
特攻隊長まるるう  2004-06-24 14:49:29  No: 114218  IP: [192.*.*.*]

うにぃさんのリンク先を見ると
  Form_Initialize と Form_Terminate も
監視したほうが良いらしいので追加しておいて下さい。

編集 削除
初心者プログラマ  2004-06-24 16:48:36  No: 114219  IP: [192.*.*.*]

うにぃさん、特攻隊長まるるうさん

ありがとうございました。
色々とご意見を参考にやってみたところ、
無事メモリを解放することができました。

また『プログラマのメモ帳』も大変役立ちました。
(でも現時点では完全には理解できませんでしたが・・)

助かりました。
本当にありがとうございました。

編集 削除