1

質問:

あるモーダル ダイアログを別のモーダル ダイアログから呼び出すと、モダリティが元に戻されるのを見た人はいますか?

ShowDialog を呼び出して結果を取得したいが、モーダルではない場合 (他のフォームが引き続き応答する場合)、どのようにしますか? (私たちはそれをやろうとしているわけではありません...しかし、それを行う方法がある場合、おそらく私たちは偶然にそれを行っています.)

詳細:

標準の PrintDialog、標準の PageSetupDialog、および標準の PrintPreviewDialog を起動するボタンを持つ独自の印刷ダイアログを実装しました。また、印刷はすべて、標準の PrintDocument クラスから派生した独自の PrintDocument クラスで行われます。したがって、標準的な慣行に従うようにしています...ユーザーが開始する必要がある追加の設定がいくつかあります。

ourPrintDialog.ShowDialog(mainWindow) を使用してメニューから印刷ダイアログを呼び出します。起動すると、適切にモーダルになります(他のすべてのウィンドウは応答しません...特にそのmainWindow)。その印刷ダイアログから、他の 3 つのダイアログのそれぞれを呼び出すボタンがあります...そしてすべてが ShowDialog(ourPrintDialog) で呼び出され、その最初の印刷ダイアログを親として作成します。PrintDialog と PageSetupDialog の場合、モーダルで表示されます (mainWindow と ourPrintDialog および他のすべてのウィンドウは応答しません)。そして、それらを OK またはキャンセルすると、まだモーダルな最初の印刷ダイアログ (ourPrintDialog) に戻ります (他のウィンドウは応答しません)。

ただし、標準の PrintPreviewDialog の場合は、同じ方法 (最初のダイアログを親として ShowDialog) で呼び出しますが、完全にモーダルではありません。メイン ウィンドウが再び応答するようになります。したがって、印刷ダイアログが印刷中の基になるドキュメントの操作を開始できます...もちろん、これは多くの仮定に違反しています。また、プレビュー ダイアログを閉じて元の印刷ダイアログに戻ると、モーダル状態ではなくなります... メイン ウィンドウはまだ応答しています。

単純なテスト アプリでこれを実行しようとしましたが、正常に動作します... PrintPreviewDialog に入るとき、モダリティは壊れていません。したがって、PrintPreviewDialog (他の 2 つでは発生しないため) とアプリのメイン ウィンドウ (テスト アプリでは発生しないため) の間の特定の相互作用のようです。それが何であるかについて何か提案はありますか?(したがって、上記の2つの質問。)

提案をお寄せいただきありがとうございます!

4

1 に答える 1

0

原因は不明ですが、ウィンドウで Spy++ を実行してメッセージの流れを確認すると、ウィンドウ間で何が起こっているか、または問題のウィンドウのプロパティに関する手がかりが得られる場合があります。

于 2012-12-17T19:55:44.513 に答える