教えて下さい。
VB6で開発しているのですが。
子をアンロードして親に戻っているのですが、裏(?)で子のコードがアンロードされているにも関わらず実行されているんです。
(子のコードにブレークポイントを設定して確認)
これを完全に止めるにはどのようにすればよいのでしょうか。。。
よろしくお願いします。
えぇと、「親」とか「子」というのは、何の話なのでしょうか?
階層化レコードセット?
MDIフォームとMDI子フォーム?
ツリービューコントロールとか?
ContainerプロパティとかParentプロパティとかの話?
> アンロードされているにも関わらず実行されているんです。
フォームの事だとすれば……。
http://www.microsoft.com/japan/developer/library/VBCon98/vbconlifecycleofvisualbasicforms.htm
> これを完全に止めるにはどのようにすればよいのでしょうか。。。
質問の内容が今ひとつわからなかったので、具体的な例をあげて
説明していただけると助かります。
>子のコードにブレークポイントを設定して確認
どこのコードにブレークポイントを張ったんですか?
すいません。
あるフォームより
frm2.show 1
により子フォームを起動しています。
子フォームでは
外部からのデータを取得し、処理を行なっています。
子フォームで処理後、
Unload Me
にてアンロードし、親フォームに戻っています。
子フォームはアンロードしているのに親フォームで外部からデータが
入ってきたときに子フォームでの処理が実行されてしまいます。
よろしくお願いします。
ブレークポイントは子フォームのデータ取得時の処理ルーチンに設定しました。
まずは、先に示した 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 等で
呼出履歴を追ってみてください。
ツイート | ![]() |