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


てばさき  2005-02-24 07:24:34  No: 88575

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

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

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

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

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

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


Dental  2005-02-24 09:26:59  No: 88576

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

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


ささ  2005-02-24 14:12:00  No: 88577

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

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

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


てばさき  2005-02-24 18:24:16  No: 88578

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

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

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


名無し  2005-02-24 18:39:29  No: 88579

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


LESIA  2005-02-24 21:54:31  No: 88580

自分以外のフォームを閉じるならこんな感じ
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 21:56:17  No: 88581

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


じゃんぬねっと  URL  2005-02-24 23:21:00  No: 88582

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

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

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


てばさき  2005-02-25 03:38:32  No: 88583

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

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


おせっかい者  2005-02-26 22:10:04  No: 88584

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


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

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






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