X(Twitter) Zenn GitHub RSS 共有

FlowLayoutPanelをマウスホイールでスクロールできない

作成日時:2024-12-07
更新日時:2024-12-07

結論

FlowLayoutPanelのMouseEnterイベントに、FlowLayoutPanelにフォーカスする処理を入れればスクロールできるようになる。
またはClickイベントに入れる。

flowLayoutPanel1.MouseEnter += (_, _) => flowLayoutPanel1.Focus();
flowLayoutPanel1.Click += (_, _) => flowLayoutPanel1.Focus();

経緯

FlowLayoutPanelに大量のコンポーネントを追加した。
親Formの描画範囲を超えているので、スクロールバーが発生した。
スクロールバーを直接操作すればスクロールできるが、マウスホイールではスクロールできなかった。

対応

FlowLayoutPanelにフォーカスが当たるようにする。

どうやらフォーカスが当たっていないから動かなかったぽい。
親のマウスホイールイベントは発火していた。

別解

※未検証

親のマウスホイールイベントが発火したら、対象のコントロールのマウスホイールイベントを発火させる。

対象のコントロールを継承したコントロールを作成し、OnMouseWheelを呼び出すメソッドを作成。
⇒OnMouseWheelの可視性がprotectedだから。

作成したメソッドを、親のマウスホイールイベントに登録する。