WindowsFormsApplicationBase.OpenFormsとForm.ShowInT への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 Tさん  (社会人)
投稿日時
2023/12/15 12:48:40
.net Framework 4.8でWindowsフォームアプリを開発しているのですが、下記の事象が起きて困っております。
フォームを表示した状態から閉じるときにCloseをCancelし、
WindowStateをMinimized
ShowInTaskbarをFalse
Formを.Hide
としてバックグラウンドで稼働させたままにしています。
その後、タスクバーなどから再度フォーム表示させるために
WindowStateをNormal
ShowInTaskbarをTrue
Formを.Show
として表示しています。
その後、同フォームの処理で
WindowsFormsApplicationBase.OpenForms
で開いているフォームを取得すると
フォームが開いているにも関わらず
OpenForms内のフォームがない状態になります。
(OpenForms.Count=0)
確認したところ
ShowInTaskbar=True
の処理の前はOpenForms内には開いてるFormが入っており、
処理後にOpenForms内が空になっています。
何故か、ShowInTaskbar=Trueのあとに
Form.Hideをしたあと
Form.Showすると
その時ShowしたFormはOpenForms内に入ります。
(その他のフォームが開いていた場合でもShowしたFormのみがOpenForms内に入ります。
現状、フォーム(Form1)内にフォーム(Form2)を表示しており上記処理ではForm1のみOpenForms内に入ります。)
原因、解決策、対策わかる方おりますでしょうか?
ド素人のため、いろいろ調べましたが原因等が見つかりませんでした。
よろしくお願いします。
フォームを表示した状態から閉じるときにCloseをCancelし、
WindowStateをMinimized
ShowInTaskbarをFalse
Formを.Hide
としてバックグラウンドで稼働させたままにしています。
その後、タスクバーなどから再度フォーム表示させるために
WindowStateをNormal
ShowInTaskbarをTrue
Formを.Show
として表示しています。
その後、同フォームの処理で
WindowsFormsApplicationBase.OpenForms
で開いているフォームを取得すると
フォームが開いているにも関わらず
OpenForms内のフォームがない状態になります。
(OpenForms.Count=0)
確認したところ
ShowInTaskbar=True
の処理の前はOpenForms内には開いてるFormが入っており、
処理後にOpenForms内が空になっています。
何故か、ShowInTaskbar=Trueのあとに
Form.Hideをしたあと
Form.Showすると
その時ShowしたFormはOpenForms内に入ります。
(その他のフォームが開いていた場合でもShowしたFormのみがOpenForms内に入ります。
現状、フォーム(Form1)内にフォーム(Form2)を表示しており上記処理ではForm1のみOpenForms内に入ります。)
原因、解決策、対策わかる方おりますでしょうか?
ド素人のため、いろいろ調べましたが原因等が見つかりませんでした。
よろしくお願いします。
投稿内容をヒントに試しに下記のようなプログラムを作ってみましたが、おっしゃるような現象は起きていないように見えます。
このプログラムは Form2を非表示にして、3秒後にForm2を再表示して、My.Application.OpenForms を調べてそのForm2が含まれていることを確認できました。
実際に試すにはForm1で、Button1をクリックして、Form2を表示した後、Form2を右上の×ボタンで閉じて、3秒待ってください。
Debug.WriteLineで出力したメッセージは 出力ウィンドウで確認できます。
https://www.umayadia.com/Note/Note021DebugWriteLine.htm
私の環境(Windows 11 + VB + .NET Framework 4.8)で実行すると次のように出力されました。
ShowInTaskbar = Trueより前 OpenFroms内にありません。
ShowInTaskbar = Trueより後 OpenFroms内にあります。
2
Form1側
Form2側