• ベストアンサー

モーダルダイアログで発生するイベント(C#)

C#で、FormをShowDialog()、つまりモーダルダイアログで表示してからの話です。 ここで、当のForm以外をマウスでクリックしたりすると、当のFormのタイトルバーがチカチカしますよね。 このとき、当のFormにはどんなイベントが発生しているのでしょうか? 当のForm以外をクリックしたときに、「ダイアログのボタンを押して、値を選択してください」のようなメッセージを出したいと思っています。 そのために、そのイベントを使えばいいのかな、と思いました。 どうぞ、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。 もっと違ったアプローチがあるかもしれませんが WM_WINDOWPOSCHANGINGメッセージを捕まえてはどうでしょうか。 仮にForm1からForm2をモーダルで呼び出したとして protected override void WndProc(ref Message m) { // WM_WINDOWPOSCHANGING...0x0046 if ( m.Msg == 0x0046 ) { System.Diagnostics.Debug.Write("キタコレ!"); } base.WndProc(ref m); } Form2がFlashされるタイミングで 上記のデバッグ用文字列が出力されます。 そうでない時も同じイベントを拾いますが パラメータを見たりしてうまく判断できかもしれません。 参考URLにWM_WINDOWPOSCHANGINGメッセージの詳細があります。

参考URL:
http://www.winapi-database.com/Message/WM/WM_WINDOWPOSCHANGING.html
pokuda
質問者

お礼

情報ありがとうございました。 最終的には、m.Msgが 0x46 → 0x86(m.Param==0x00) → 0x86(m.Param=0x01) の3連コンボの時が、そのタイミングであることがわかりました。 どうもありがとうございました。