1

フォームを開くたびにモーダルで表示したい。作成方法と開く方法を変更することはできません。フォームクラス内からフォームを最上位に保つことができるかどうか疑問に思いました。

1 つの機会はTopMostプロパティです。これは一般的には機能しますが、メインスレッドが閉じるのを待っている間にフォームを表示すると、アプリケーションを変更しても (たとえばブラウザーに) フォームが一番上に表示されたままになります。そのため、どこにいてもフォームは表示されたままです。

私が遭遇したもう1つの問題は、場合によっては親フォームによって採用され、他のウィンドウやポップアップメッセージをブロックする可能性があることです.

フォーカスが失われたら、イベントへのフックを使用しOnLostFocusて再びトップに立つことを考えていましたが、それが良いアイデアかどうかはわかりません...

それについて何か役立つ考えはありますか?


編集

コメントのため、説明を拡張します。これが実際のユースケースです

SplashScreenManager特定のフォームを として表示できるDevexpress を使用していWaitFormます。WaitFormはモーダルで表示することを意図していないため (サポートセンターを参照)、そのようにする方法を探しています。

フォームの表示方法を変更することはできません。これはSplashScreenManager. はWaitForm、メイン スレッドと特定のバックグラウンド ワーカーの両方から表示されます。

したがって、これは私たち自身の独自の形式に関するものであり、それを私たち自身のアプリケーション内に表示しています。

4

2 に答える 2

1

使用する:

TopLevel = true;

これはまさにあなたが望むことをします。メイン フォームが表示されている限り最前面に表示され、メイン フォームが別のウィンドウで非表示になっている場合は非表示になります。

.Show(owner) を使用せずに、スプラッシュ フォームの所有者をメイン フォームに明示的に設定できます。

splashForm.Owner=mainForm;
splashManager.Show(splashForm);
于 2013-03-28T10:55:45.110 に答える
0

TopMost プロパティはウィンドウ レベルで機能し、他のウィンドウ (ブラウザーなど) もカバーするため、必要ありませんでした。最後に、ウィンドウのフォーカスイベントに接続して、ウィンドウが常に上にあることを確認しました。

于 2013-06-05T08:43:29.843 に答える