原則として、絶対にそうしてはいけない場合を除いて、TopMostは避けてください。どうしてもいけない場合は、一度に複数のTopMostフォームを使用しないでください。(結局のところ、3つのTopMostフォームはあり得ません---誰かが失う必要があります)。
まず、を呼び出すときに所有者を正しく設定していることを確認しますForm.ShowDialog()
。これにより、新しいフォームが適切な場所に表示される可能性が高くなり、アプリケーションの動作が全体的に改善されます。次に、常にTopMostウィンドウが1つしかないことを確認します。これらのことを組み合わせて失敗すると、間違いなく問題が発生する可能性があります。例えば:
// MainForm.cs -- Don't do this
this.TopMost = true;
childForm.TopMost = true;
childForm.ShowDialog(/*no parent spec'd*/);
さて、何が起こりますか?メインフォームと子フォームの両方が一番上にあるため、どちらか一方を失う必要があります。MainFormは、childFormを最上位として作成したときにアクティブでしたが、childFormには親がありません。たぶん、Windowsはデスクトップをその親にすることに決めました。これにより、メインフォームが新しく開いた子フォームのままになる可能性があります。