Form2からForm1.Show への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 るきお  (社会人) 投稿日時 2009/6/30 22:08:05
たしかに、
>form2を表示後form1をどう処理しているかもわからないし、そもそもどうやってform1を
>表示させているかでも変わると思うし。 
このあたりの構造次第で対応方法も変わってきますが、
サンプルとしてForm1とForm2を交互に呼び出しあいLoadイベントも発生する例を紹介します。
Form1とForm2にそれぞれCommand1を貼り付けて試してください。
 ↓Form1側
Private Sub Form_Load()

    MsgBox "Form1"
    
End Sub

Private Sub Command1_Click()

    Form2.Show
    Unload Me

End Sub


 ↓Form2側
Private Sub Form_Load()

    MsgBox "Form2"
    
End Sub

Private Sub Command1_Click()

    Form1.Show
    Unload Me

End Sub


mitchinさんご指摘の繰り返しになりますが、
>Form1 は既に Load されているので実行されないでしょう。
そもそもLoadイベントは最初にそのフォームが作り出されたときに発生するので、その後一時的に非表示になったのを再表示した程度では再実行されません。

Unloadまでして破棄してから、再度表示すると発生します。
Unloadまでしたくないが、何度もLoadイベントを発生させたいということは基本的にはできません。
その都度発生させたいのであればActivateなど他のイベントの使用を検討します。
ちょうどいいタイミングのイベントがない場合は自分で作りこみをします。
これは単にPublicな関数を1つ用意してそれをその都度呼び出せば済むレベルの場合もありますし、フラグなので状況を把握しておいてイベントごとに対応を変えたりする複雑な制御が必要になる場合もあります。
要はケースバイケースです。

というわけで結局結論は、neptuneさんと同じで、
>どういう処理を目的としているかキチンと説明した方が
>アドバイスをもらい易いですよ。
>現状どうやっているかも書いた方が良いですね。
ということになってしまいます。
投稿者 nakaP  (社会人) 投稿日時 2009/6/30 21:49:09
幾つかの疑問は、「VB6 規定のインスタンス」で検索すると解決するかと思います。
投稿者 neptune  (社会人) 投稿日時 2009/6/30 06:53:18
どういう処理を目的としているかキチンと説明した方が
アドバイスをもらい易いですよ。
現状どうやっているかも書いた方が良いですね。

form2を表示後form1をどう処理しているかもわからないし、そもそもどうやってform1を
表示させているかでも変わると思うし。
投稿者 mitchin  (社会人) 投稿日時 2009/6/30 05:08:34
Form1 は既に Load されているので実行されないでしょう。
Form_Load 内の記述をメソッド化して、Form1 の Visible が True になったらそのメソッドを呼び出すようにしてみてはいかがですか?

VB6 を使ったことがないので判りませんが、VisibleChanged イベントがあれば できると思います。
投稿者 ジョン  (社会人) 投稿日時 2009/6/30 04:53:39
vb6.0で、まずForm1でForm2.Showをして今度はForm2でForm1.Showをすると、Form1のForm_Load()に書いてある処理が実行されません。
どういうプログラムを書けばForm1.ShowでForm1に戻ってきたときにForm_Load()の処理が行われるようになりますか?