画面の呼び出し・アンロードについて

解決


ミチ  2004-10-14 17:40:39  No: 116991  IP: [192.*.*.*]

お世話になります。
画面A、画面B、画面Cがあります。
・画面Aから画面BをModalで呼び出します。このとき画面Aは表示させたままです。
・画面Bから画面CをModal呼び出します。このとき画面Bは閉じます。
・画面Cには「閉じる」ボタンがあり、閉じるボタンを押した時・Windowの×ボタンを押したときに、画面Cを閉じて、画面Bに戻ります。

以上のことをしたいのですが、どうもうまくいきません・・。

Modalで表示する際は、既にModalな画面があれば、それをHideかUnloadしなければならないようです。
画面CのForm_Unloadイベントで、
> Unload 画面C
> 画面B.Show vbModal
をしても、画面Cがロード状態のままになってしまいます。

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

編集 削除
どうろ  2004-10-14 17:51:32  No: 116992  IP: [192.*.*.*]

アンロードするんじゃなくて非表示にるのは駄目なんですかね?

編集 削除
どうろ  2004-10-14 17:58:51  No: 116993  IP: [192.*.*.*]

Form1
Form2
Form3
を用意
Form1,2にcommandボタン配置

form1に記述

Private Sub Command1_Click()
Form2.Show vbModal
End Sub

form2記述

Private Sub Command1_Click()

Me.Visible = False
Form3.Show vbModal
Me.Visible = True
End Sub


こんな感じじゃ駄目?

編集 削除
nanashi  2004-10-14 18:05:33  No: 116994  IP: [192.*.*.*]

> Modalで表示する際は、既にModalな画面があれば、
> それをHideかUnloadしなければならないようです。

ModalのフォームからModalのフォームを表示することは出来ますけど?

で、Hideで構わないなら

> ・画面Bから画面CをModal呼び出します。このとき画面Bは閉じます。

実際どうやってるのか知りませんが、画面Bから画面Cを呼ぶときに

    Me.Hide
    画面C.Show vbModal
    Me.Visible = True

と書けば出来ます。
画面CのForm_Unloadイベントでは特に何もする必要はありません。

編集 削除
特攻隊長まるるう  2004-10-14 18:11:07  No: 116995  IP: [192.*.*.*]

どうろさんのコードでほぼ問題ないとは思うんですが、
こちらの環境では Form2 の Modal が解けちゃったので。
[VB6.0]
'/// Form1
Option Explicit
Private Sub Command1_Click()
    Form2.Show vbModal
End Sub
'/// Form2
Option Explicit
Private Sub Command1_Click()
    Me.Hide
    Form3.Show vbModal
    Me.Show vbModal '←ここだけ修正点
End Sub
'/// Form3
Option Explicit

編集 削除
ミチ  2004-10-14 18:39:15  No: 116996  IP: [192.*.*.*]

みなさん、ありがとうございます。

えぇと、Form2からForm3を呼び出すのは問題なく出来るんですが、
Form3からForm2を呼び出すときに、Form3が画面に残ってしまうんです。
いろいろやってみましたがダメでした。

書き忘れましたが私の環境は、WinXP+SP1、VB6です。

あと、Form2からForm3を呼ぶときは、Form2をUnloadではなくHideでもいいのですが、Form3からForm2を呼ぶときは、HideではなくUnloadしたいです。

よろしくお願いします。。。

編集 削除
特攻隊長まるるう  2004-10-14 19:16:53  No: 116997  IP: [192.*.*.*]

…意味が分からない。Form3 から Form2 を
呼び出す必要性をこれっぽっちも感じない。
nanashi さんが書かれているように
>・画面Aから画面BをModalで呼び出します。このとき画面Aは表示させたままです。
>・画面Bから画面CをModal呼び出します。このとき画面Bは閉じます。
>・画面Cには「閉じる」ボタンがあり、閉じるボタンを押した時・Windowの×ボタンを押したときに、画面Cを閉じて、画面Bに戻ります。
だけなら Form3 から Form2 を呼び出す必要が無いんです。
呼び出さなくても実現できます。

"モーダル" ダイアログ ボックスは、終了(非表示またはアンロード)
しない限り次の操作に進むことができないダイアログボックス
です。Form3 から Form2 をモーダルで呼び出すことが必要
なら、Form2 が終了(非表示またはアンロード)しないと Form3 
は次の作業ができません。Form3 は Form2 が終了するまで
アンロードしないと言っているのも同じです。それをアンロード
するとか言ってる時点で矛盾してます。
Form2 が終了(非表示またはアンロード)した時まで処理を
待っているのは誰ですか?Form3 はアンロードするんだから
待っていませんよね?。だったら Form2 にモーダルで
命令する事が間違ってます。処理を待つ人が Form2 を
モーダルで表示して下さい。

編集 削除
ミチ  2004-10-14 19:27:51  No: 116998  IP: [192.*.*.*]

特攻隊長まるるうさん、ありがとうございます。

> Form3 から Form2 を呼び出す必要が無いんです。
呼び出さなくても実現できます。
>  "モーダル" ダイアログ ボックスは、終了(非表示またはアンロード)
しない限り次の操作に進むことができないダイアログボックス
です。

ようやくこの意味がわかりました。今まで理解していませんでした…。
Form3をモーダルで開いたら、Form3を閉じるときにForm2をロードする必要はないんですね。
これでうまくできました。どうもありがとうございました。m(__)m

編集 削除