複数のフォームを閉じるには?


てばさき  2005-02-23 22:24:34  No: 88575  IP: [192.*.*.*]

お世話になります。
VB.NET2003を使用しております。

ボタン押下で、複数立ち上がっているフォームのうち、
指定したフォーム以外を閉じることは可能でしょうか?

例えば、
メニュー画面があるとします。
このメニュー画面より
フォーム1、フォ−ム2、フォーム3
と、3つのフォームを生成し、Showします。
結果、メニュー画面と3つのフォームの計4画面が表示されています。

この状態で、メニュー画面の「閉じる」ボタンを押したとき
メニュー画面を除く3つのフォームを閉じることは可能でしょうか?

ただし、フォームを生成した際に、
「どのフォームを生成したか」などの情報を
ファイルや、内部変数などに保存していないものとします。

どうかご教授の程、宜しくお願いいたします。

編集 削除
Dental  2005-02-24 00:26:59  No: 88576  IP: [192.*.*.*]

> 内部変数などに保存していないものとします。

保存すれば解決する話なのでは。

編集 削除
ささ  2005-02-24 05:12:00  No: 88577  IP: [192.*.*.*]

> 内部変数などに保存していないものとします。

何故保存できないか?について詳しく書くと、解答がつきやすいです。

>どうかご教授の程、宜しくお願いいたします。
ご教授ではなく、ご教示の間違いです。
日本語は正しく使いましょう。

編集 削除
てばさき  2005-02-24 09:24:16  No: 88578  IP: [192.*.*.*]

>さささん
ご教授→ご教示
ご指摘ありがとうございます。

>何故保存できないか?
内部変数に保存すれば、解決はするのですが
単純にそれ以外の方法がないかを知りたいだけなんです。
プログラムを作成している途中で、
そういったことができないのかがふと気になりまして
私なりに調べたのですが、方法が見つかりませんでしたので・・。

理由はそれだけなんです。

編集 削除
名無し  2005-02-24 09:39:29  No: 88579  IP: [192.*.*.*]

「ご教授」でもあながち間違いではない。
質問に関係ないので名無し。

編集 削除
LESIA  2005-02-24 12:54:31  No: 88580  IP: [192.*.*.*]

自分以外のフォームを閉じるならこんな感じ
Dim objForm As Form

For Each objForm in Forms
   If objForm.Name <> Me.Name Then
      Unload objForm
   End If
Next objForm

編集 削除
LESIA  2005-02-24 12:56:17  No: 88581  IP: [192.*.*.*]

あ、VB6じゃなくてVB.NET2003だったんですね(^^;
でも、同じような感じで出来ないかな?

編集 削除
じゃんぬねっと  URL  2005-02-24 14:21:00  No: 88582  IP: [192.*.*.*]

うーむ。Forms コレクションは VB.NET にはないんですよね。

If hForm1.IsDisposed = False Then
    hForm1.Close()
    hForm1.Dispose()
End If

どちらにしても、Form のインスタンス変数は必要です。

編集 削除
てばさき  2005-02-24 18:38:32  No: 88583  IP: [192.*.*.*]

みなさん、色々とご返答いただきありがとうございます。

立ち上がっているフォーム名をWindows側から見ることで
取得できそうなのですが・・・
フォーム名を取得しても、そこからクローズに持っていくのは
インスタンス変数なしでは不可能なんでしょうね・・。

編集 削除
おせっかい者  2005-02-26 13:10:04  No: 88584  IP: [192.*.*.*]

Task オブジェクトを使ってタスクの一覧を取得して閉じたいフォームに
.Close を送ってやれば閉じる事が出来るのですが、.NET からTask オブジェクトを使うスマートな方法が思い浮かびません。
あるいは、ITaskbarList を使用すればできるのかも知れません。

編集 削除