DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームの一括破棄の方法

環境/言語:[Windows XP .NET VS2005 C#]
分類:[.NET]

お世話になります。
FormA からFormBを起動。 FormBからFormCを起動。(何れもShowDialog(this)で起動)
FormCでは5秒間隔でタイマーを利用してブザーを鳴らす。

ブザーが鳴っている状態でFormCを閉じる。FormBが最前面になり、ブザーは鳴っている。(これはOK。このようにしたい)

FormBを閉じる。 ここでFormCも破棄し、ブザーも停止したい。
そこでFormAのFormBを起動直後
fmb.ShowDialog(this); //FormBを起動
fmb.Close();      //ここでFormBで起動したフォームをすべて閉じて破棄したい。
fmb.Dispose();
としたがブザーは停止しない。

(参考)FormBのClosingイベントにFormCのClose()、Dispose()を書けばOKである。

FormBではFormC以外にFormD・・・等をFormC同様に起動しています。

どうしたら一括でフォームを閉じて、破棄出来るでしょうか?

宜しくお願いします。
> (参考)FormBのClosingイベントにFormCのClose()、Dispose()を書けばOKである。
>
> FormBではFormC以外にFormD・・・等をFormC同様に起動しています。
>
> どうしたら一括でフォームを閉じて、破棄出来るでしょうか?

そのようにBがインスタンスの管理をしているようですから
お書きのようにC,Dなどを並べて破棄すればよいのではないですか?

「一括」とは何を期待されているのでしょうか?
Private ChildList As Generic.List(Of Form) ※VBご容赦
For Each Child As Form In ChildList
Child.Close()
Child.Dispose()
Next
とか?
■No16233に返信(まどかさんの記事)
> 「一括」とは何を期待されているのでしょうか?
> Private ChildList As Generic.List(Of Form) ※VBご容赦
> For Each Child As Form In ChildList
> Child.Close()
> Child.Dispose()
> Next
> とか?

そうです。このような形でFormBで起動したフォームを全て閉じたいのです。
色々なフォームを任意な時点で起動し、破棄しているので、管理が大変で
FormBが閉じる時に破棄残しが無い様、この様な形で、破棄残しのFormを忘れずに破棄したいのです。
まどかさんの案のChildListは起動で追加、破棄で削除としっかりと管理する必要があると思いますが、この管理をFormが自動的にしていればそれを呼び出して破棄できるので便利です。例えばコントロール管理の.Controlsのようなものがないのでしょうか?

もっと言うとfmb.Dispose();で
何故FormBで起動したFormが全て破棄できないのでしょうか?
> まどかさんの案のChildListは起動で追加、破棄で削除としっかりと管理する必要があると思いますが、この管理をFormが自動的にしていればそれを呼び出して破棄できるので便利です。

いえいえ、FormBのClosingで呼び出せばよいだけです。

> 例えばコントロール管理の.Controlsのようなものがないのでしょうか?

先に書いたような変数をひとつ用意するだけですし、
Controlsの場合も例外ではなく勝手に追加されているのではありません。
プロジェクトですべてのファイルを表示してdesigners.csファイルを見てみてください。
■No16248に返信(まどかさんの記事)

おはようございます。お世話になります。

Controlsの件は御指摘の通り私が大きな勘違いをしていました。

自動的に管理はしていないのですね。

変数ChildListに登録する方法を試しました。
上手く動作しますので、使わせて戴きます。

有難う御座いました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板