問題タブ [non-modal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
64 参照

winforms - 非モーダルの子 Windows.Forms.Form をメイン フォームに追加すると、子がフォーカスを受け取れなくなる問題

序文 (回答が投稿された後、後で削除される可能性があります)。これは、オンラインのどこにも答えが見つからなかった質問です (数日間検索した後)。試行錯誤して自分で答えを見つけましたが、主題であるフォームに特に精通していないため、私の解決策が最善ではないか、正しくない可能性さえあります。

Windows フォームを使用して小さなアプリケーションを作成しました。アプリケーションは (時間のかかる) データ処理を行い、(進行中の) エラーを表示するために 2 番目の別のウィンドウが必要です。このために、(単純な) 非モーダル フォームを使用しています。

構造はかなり単純です。

ここでの基本的な考え方は、NonModalInfoフォームがmainFormログやエラー情報をユーザーに表示するために使用されるということです。上記の構造は、私が持っているように、完全に機能します。問題は、上記でコメントした行ですThen, this critical line:。その行がなければ-これは私が最初にコードを書いた方法です-コードはほとんど機能します:非モーダルフォームが開かれ、表示され、更新されます。問題は、非モーダルフォームがフォーカスを受け取ることができないことです:非モーダルフォームをクリックしてフォーカスを与えると、mainForm点滅してフォーカスが維持されます。mainForm非モーダル フォームがフォーカスを受け取ることができないように、この動作はモーダルで開かれたときに期待されるものとまったく同じです。

現在、mainForm モーダルで開かれているShowDialog()ため ( )、おそらくこれは予期しないことではありませんが、Web 上のすべてのドキュメントと例は、このような (モーダル) メイン ダイアログが非モーダルの子ダイアログを開くことができるはずであることを示しています。子ダイアログがフォーカスを受け取ることができる必要があります。さらに、メンバー データ要素m_infoBoxが のインスタンスで初期化されていることを確認するだけでNonModalInfo、動作が異なります。子フォームにフォーカスが与えられますが、問題ありません。外観から、m_infoBoxを表示する前に が null 以外のインスタンスで初期化されている場合、 は非モーダルとして表示されているように見えます ( で表示されているにもかかわらずmainForm) 。mainFormShowDialog()

mainForm私の質問は、のメンバーm_infoBoxが null 以外のインスタンスで初期化されていることを確認する必要があるのはなぜですか? mainForm非モーダルな子を構築、追加、表示するときに、子がフォーカスを受け取ることができるように、それを構築して「表示」する方法はありますか? これに関するドキュメントはどこにありますか? 上記のコードは実際にこれを行う正しい方法ですか? ボンネットの下で何が起こっているのか誰か説明できますか?

編集: 実際、状況はこれよりも複雑です。親が表示されているときに子の非モーダル フォームが表示されている場合、親は「モーダル」になり、子はフォーカスを受け取ることができません。親が表示される前に子フォームの所有者が親に設定されている場合、親を表示しようとすると例外がスローされます。これらすべての問題に関する適切なドキュメントが見つかりません。

0 投票する
2 に答える
379 参照

qt - QDialogのエスケープはモーダルモードでのみ機能しますか?

Esc非モーダルモードのダイアログでは機能せず、イベントは下にあるウィンドウに移動します。追加のみ

作成時にダイアログに入力すると、Escキーが機能し、reject()スロットが呼び出されます。Esc非モーダルダイアログに出入りするのは正常ですか、それとも可能ですか?