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

解決


ミチ  2004-10-15 02:40:39  No: 116991

お世話になります。
画面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-15 02:51:32  No: 116992

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


どうろ  2004-10-15 02:58:51  No: 116993

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-15 03:05:33  No: 116994

> 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-15 03:11:07  No: 116995

どうろさんのコードでほぼ問題ないとは思うんですが、
こちらの環境では 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-15 03:39:15  No: 116996

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

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

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

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

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


特攻隊長まるるう  2004-10-15 04:16:53  No: 116997

…意味が分からない。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-15 04:27:51  No: 116998

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

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

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


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

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






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