アンロードについて


どんく  2006-02-21 06:48:35  No: 94315

教えて下さい。
VB6で開発しているのですが。
子をアンロードして親に戻っているのですが、裏(?)で子のコードがアンロードされているにも関わらず実行されているんです。
(子のコードにブレークポイントを設定して確認)
これを完全に止めるにはどのようにすればよいのでしょうか。。。

よろしくお願いします。


魔界の仮面弁士  2006-02-21 06:58:46  No: 94316

えぇと、「親」とか「子」というのは、何の話なのでしょうか?

階層化レコードセット?
MDIフォームとMDI子フォーム?
ツリービューコントロールとか?
ContainerプロパティとかParentプロパティとかの話?

> アンロードされているにも関わらず実行されているんです。
フォームの事だとすれば……。
http://www.microsoft.com/japan/developer/library/VBCon98/vbconlifecycleofvisualbasicforms.htm

> これを完全に止めるにはどのようにすればよいのでしょうか。。。
質問の内容が今ひとつわからなかったので、具体的な例をあげて
説明していただけると助かります。


030  2006-02-21 07:00:31  No: 94317

>子のコードにブレークポイントを設定して確認
どこのコードにブレークポイントを張ったんですか?


どんく  2006-02-21 07:12:08  No: 94318

すいません。

あるフォームより
frm2.show 1
により子フォームを起動しています。
子フォームでは
外部からのデータを取得し、処理を行なっています。
子フォームで処理後、
Unload Me
にてアンロードし、親フォームに戻っています。
子フォームはアンロードしているのに親フォームで外部からデータが
入ってきたときに子フォームでの処理が実行されてしまいます。

よろしくお願いします。


どんく  2006-02-21 07:13:08  No: 94319

ブレークポイントは子フォームのデータ取得時の処理ルーチンに設定しました。


魔界の仮面弁士  2006-02-21 08:38:24  No: 94320

まずは、先に示した URL 『Visual Basic フォームの有効期間』の
内容を、きちんと理解しておいてください。
(VB6付属のヘルプにも、まったく同等のコンテンツがあります)

> frm2.show 1
『.Show 1』ではなく、『.Show vbModal』のように定数で指定した方がよいですよ。
(ヘルプで 1 を指定するよう書かれているのは、VB2 時代からの名残だったり…)

> ブレークポイントは子フォームのデータ取得時の処理ルーチンに設定しました。
で、そのルーチンというのは、具体的にどこにあるのでしょうか? (^^;

============
とりあえず、frm2の状況を追うために、frm2の各イベントの先頭に
下記のコードを追加してみてください。

Private Sub Form_Initialize()
  Debug.Print "frm2のInitialize / id="; ObjPtr(Me)
        '
        '
        '
End Sub
Private Sub Form_Load()
  Debug.Print "frm2のLoad / id="; ObjPtr(Me)
        '
        '
        '
End Sub
Private Sub Form_Unload()
  Debug.Print "frm2のUnload / id="; ObjPtr(Me)
        '
        '
        '
End Sub
Private Sub Form_Terminate()
  Debug.Print "frm2のTerminate / id="; ObjPtr(Me)
        '
        '
        '
End Sub
============

もし、予期せぬところで Load イベント等が呼び出されていた場合には、
それがどこから呼び出されているのか、(一時停止中に)Ctrl + L 等で
呼出履歴を追ってみてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加