フォームコレクションを利用してみる


■アプリケーションの実行中に、現在開いているフォームやその数を取得したくなる時があると思うのですが、 皆さんなら如何に対応するでしょうか?独自にカウントしておく?MDIフォームなら簡単な話しではありますが・・・

 Dim intfrm As Integer = Me.OwnedForms.Count

 For Each objfrm As Form In Me.OwnedForms
  '   処理
 Next
筆者は、上記の様な記述で取得していました。ただ、これには問題もありまして、 メインのフォームからOwnerを指定してあげないとOwnedFormsには含まれないのです。 そして、ケースにもよりますが、Owner指定してしまうと、 そのフォームは自フォームより上に表示されてしまい邪魔になることも・・・ そこで、いつもの如く調べ始めました!ところ、意外にもあっさり解決方法に辿りつきました。
 Dim intfrm As Integer = Application.OpenForms.Count

 For Each objfrm As Form In Application.OpenForms
  '   処理
 Next
上記がApplicationクラスを用いた方法です。 この場合、カウントにもフォームのコレクションにも自ウィンドウが含まれますので、 そこのところだけ注意すれば良いかと思います。 この方法が使える様になったのは.NET Framework 2.0からとのことです。 知らなかった・・・


関連リンク(情報源)

http://www.atmarkit.co.jp/fdotnet/dotnettips/473openforms/openforms.html

TOP ▲