トップ回答者
MDIにパネルを配置すると子フォームがひとつだけ表示の場合にフォーカスが移動できなくなる。

質問
-
Visual Studio Express 2012でMDI親フォームを使用したWindowsフォームアプリケーションの開発を行っていますが、下記の問題が発生しておりいます。回避方法に関してアドバイスよろしくお願いします。
MDIにパネル(Dock=Left)、パネル上にボタンを2つ配置しています。子フォームを表示した直後は、子フォームでマウスウィールに反応しますが、パネル上のボタンをクリックし、再度、子フォームをクリックしてもその後マウスウィールに反応しません。
また、子フォームがない状態では、Tabキー操作により、パネル上の2つのボタンが交互にフォーカスを取得しますが、子フォームがひとつ表示されている状態では、2つ目のボタンにフォーカスが移動した後、Tabキー操作でフォーカスの移動ができなくなります。ただし、子フォームが2つになるとTabキーでフォーカス移動が
パネル上のボタン1→パネル上のボタン2→子フォーム1→子フォーム2→パネル上tのボタン1...
フォーカス移動が行われます。
回答
-
こんにちは。
これはおそらく仕様ではないですよね…。
MDI子ウインドウ以外にフォーカスがある場合に、アクティブっぽい表示になっているMDI子ウインドウが
WndProcを処理してくれないようでした。ただ、MDI親ウインドウの管理上はアクティブと判断されているので
親側でActiveMdiChildを一度取得して、非アクティブ→アクティブ化としてやればマウスホイールについては無理やりですが何とかなりそうでした。たぶんタブ遷移についてもメッセージを処理してくれないからだとは思いますが、
回避策あるのでしょうか…。#MDI初めて触ったもので、もし見当違いの方向で回答していたらご指摘ください…。
- 回答としてマーク ymf744b 2015年4月19日 13:22
すべての返信
-
こんにちは。
これはおそらく仕様ではないですよね…。
MDI子ウインドウ以外にフォーカスがある場合に、アクティブっぽい表示になっているMDI子ウインドウが
WndProcを処理してくれないようでした。ただ、MDI親ウインドウの管理上はアクティブと判断されているので
親側でActiveMdiChildを一度取得して、非アクティブ→アクティブ化としてやればマウスホイールについては無理やりですが何とかなりそうでした。たぶんタブ遷移についてもメッセージを処理してくれないからだとは思いますが、
回避策あるのでしょうか…。#MDI初めて触ったもので、もし見当違いの方向で回答していたらご指摘ください…。
- 回答としてマーク ymf744b 2015年4月19日 13:22