投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/11/10 18:05:01
> 元々「form1」にはモーダルのみでした。
済みません。『Form1 にはモーダルのみ』という日本語の意味が分かりません。

元々 Form2 や Form3 はなく、Form1 のみをモーダルで表示していた、という意味でしょうか?

Form1 をスタートアップフォームとしていた場合、通常は、
暗黙の Application.Run メソッドによって起動されますが、
それを意図的に、Sub Main() から ShowDialog で呼び出していたとか。

それとも、ここでいう Form1 とは、フォーム名ではなくプロジェクト名なのでしょうか?
(Form1.exe が扱うフォームがすべてモーダルだった、という意味で)


なお、ShowDialog で呼び出したフォームは、Close メソッドを呼び出したり
右上の × を押したとしても、非表示になるだけでメモリ上には残ったままになります。
そのため Show メソッドで呼んだ場合とは異なり、呼び出し元が責任をもって
モーダルフォームを Dispose すう必要があることも忘れずに…。
https://dobon.net/vb/bbs/log3-42/25503.html


> モーダルをモーダレスのものに変更することは出来ないです。
モーダレスではなく、モードレスですね。

アプリケーションの仕様を変更することは出来ないと言っても、
Windows の動作仕様を変更することはもっと出来ないことなので、
正攻法としては、やはり下記のいずれかになろうかと思います。

案1) アプリケーションをモードレスに修正する
案2) モードレスを一時的に Hide して、モーダルの Shown イベントで表示しなおす


モーダルフォーム上から、モードレスフォームを表示することは可能ですが、
モーダルからモードレスに切り替えることはできないので、そのフォームは
Close なり Hide なり Visible = False なりで一度閉じてから開きなおす必要があります。
これが案2の手法にあたります。

ただし、そのフォームを Owner とする子フォームがいた場合、親が閉じられた(非表示も含む)時に
子フォームも連鎖して閉じられることになる点を考慮する必要があります。

案2 だと、フォーム間の依存関係が強くなり、手間も増えるので、
個人的には 案1 への移行を検討することをお奨めしておきます。