お世話になります。
VB.NET2003を使用しております。
ボタン押下で、複数立ち上がっているフォームのうち、
指定したフォーム以外を閉じることは可能でしょうか?
例えば、
メニュー画面があるとします。
このメニュー画面より
フォーム1、フォ−ム2、フォーム3
と、3つのフォームを生成し、Showします。
結果、メニュー画面と3つのフォームの計4画面が表示されています。
この状態で、メニュー画面の「閉じる」ボタンを押したとき
メニュー画面を除く3つのフォームを閉じることは可能でしょうか?
ただし、フォームを生成した際に、
「どのフォームを生成したか」などの情報を
ファイルや、内部変数などに保存していないものとします。
どうかご教授の程、宜しくお願いいたします。
> 内部変数などに保存していないものとします。
保存すれば解決する話なのでは。
> 内部変数などに保存していないものとします。
何故保存できないか?について詳しく書くと、解答がつきやすいです。
>どうかご教授の程、宜しくお願いいたします。
ご教授ではなく、ご教示の間違いです。
日本語は正しく使いましょう。
>さささん
ご教授→ご教示
ご指摘ありがとうございます。
>何故保存できないか?
内部変数に保存すれば、解決はするのですが
単純にそれ以外の方法がないかを知りたいだけなんです。
プログラムを作成している途中で、
そういったことができないのかがふと気になりまして
私なりに調べたのですが、方法が見つかりませんでしたので・・。
理由はそれだけなんです。
「ご教授」でもあながち間違いではない。
質問に関係ないので名無し。
自分以外のフォームを閉じるならこんな感じ
Dim objForm As Form
For Each objForm in Forms
If objForm.Name <> Me.Name Then
Unload objForm
End If
Next objForm
あ、VB6じゃなくてVB.NET2003だったんですね(^^;
でも、同じような感じで出来ないかな?
うーむ。Forms コレクションは VB.NET にはないんですよね。
If hForm1.IsDisposed = False Then
hForm1.Close()
hForm1.Dispose()
End If
どちらにしても、Form のインスタンス変数は必要です。
みなさん、色々とご返答いただきありがとうございます。
立ち上がっているフォーム名をWindows側から見ることで
取得できそうなのですが・・・
フォーム名を取得しても、そこからクローズに持っていくのは
インスタンス変数なしでは不可能なんでしょうね・・。
Task オブジェクトを使ってタスクの一覧を取得して閉じたいフォームに
.Close を送ってやれば閉じる事が出来るのですが、.NET からTask オブジェクトを使うスマートな方法が思い浮かびません。
あるいは、ITaskbarList を使用すればできるのかも知れません。
ツイート | ![]() |