Windows Forms の MDI アプリケーションで ActiveX コントロールを使用すると、マウス クリックで子ウィンドウの切り替えができなくなる

Last Update: feedback 共有

(※ 2019 年 4 月 11 日に JAPAN Platform SDK (Windows SDK) Support Team Blog/Forum に公開した情報の再編集・再掲です。)

こんにちは、Platform SDK (Windows SDK) サポート チームです。
今回は Windows Forms の MDI アプリケーションで、子ウィンドウがタイトル バーでしか切り替えられなくなる現象をご案内します。

現象

Windows Forms で MDI アプリケーションを作成した場合、MDI の子ウィンドウは、タイトル バーやクライアント領域をクリックすることで、前面のウィンドウを切り替えることができます。
以下のスクリーンショットでは、ChildForm 1 内のマウス カーソルの位置をクリックしています。


図1 (クライアント領域をクリック)


図2 (前面のウィンドウが切り替わります)

しかし、ActiveX コントロールが配置された子ウィンドウを表示すると、それ以降、クライアント領域をクリックしても、ウィンドウが切り替わりません。(図3)
以下のスクリーンショットは先ほどと異なり、ActiveX コントロールが配置された ChildForm 2 を表示した状態で、先ほどと同じ位置をクリックした結果です。
ChildForm 2 から切り替わっていません。


図3 (切り替えられない操作)

タイトル バーをクリックした場合は切り替えることができます。


図4 (切り替えられる操作)

ChildForm 1 だけでなく、ActiveX コントロールが配置された ChildForm 2 も、タイトル バーをクリックしないと切り替えることができません。

回避策

子ウィンドウの MouseDown イベントに、以下のような明示的に切り替える実装を追加することで回避できます。

Private Sub Form_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
   Me.Activate()
End Sub

実装の追加ができない場合は、タイトル バーでの切り替え操作をご利用ください。


本ブログの内容は弊社の公式見解として保証されるものではなく、開発・運用時の参考情報としてご活用いただくことを目的としています。もし公式な見解が必要な場合は、弊社ドキュメント (https://docs.microsoft.comhttps://support.microsoft.com) をご参照いただくか、もしくは私共サポートまでお問い合わせください。