サブ画面を常に最前面に出したいが、TopMost だとメモ帳よりも前面に出てしまう
久しぶりにハマった問題を、やっと、や~~~っと解決できたので共有します。
問題
つまり、最前面の効果を、Windows 全体ではなく、プロセス単位(作った WinForms アプリ内だけに狭めたい)にしたい。という問題です。アプリ表示中(というよりはアクティブ中?)は、サブ画面を最前面に表示していてほしいのですが、メモ帳や Excel を起動したら、サブ画面は隠れてほしいわけです。
これを調べていました。ずっと、ずうぅぅっと。TopMost に何か組み合わせる系か!?と思いつつも見つからず・・・。
で、やっとたどり着いたのが以下の記事。
答え
TopMost = false
のまま変えなくてよくて、Owner
プロパティに自分自身のインスタンスをセットするか、Form.Show(this)
のように、表示する際に自分自身のインスタンスを渡すだけでいいみたいです。
Owner
は、親画面が終了したときに、サブ画面側も一緒に終了してほしい時に渡す、とか親画面の公開メンバーを呼び出したい時に使う、みたいなイメージでしたが、前面表示機能があるんですね。ちなみに前者の方の認識も間違っていて、Owner
に自分自身のインスタンスを渡さなくても、親画面を終了させたらサブ画面側も一緒に終了しました。