Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
モーダル制御について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30668#CommentId84827
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
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 への移行を検討することをお奨めしておきます。