C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: スプリットコンテナのマウスホイールイベントを制御したい


(過去ログ 83 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■49479 / inTopicNo.1)  スプリットコンテナのマウスホイールイベントを制御したい
  
□投稿者/ あぴす (9回)-(2010/05/06(Thu) 14:17:36)

分類:[C#] 

VS2008で開発しています。

SplitContainerのPanel上に独自コントロール(Panel上に複数のボタンを張り付けている)を複数貼り付けています。
独自コントロールとSplitContainerのPanelの両方にスクロールバーが表示されている状態です。
(独自コントロールのスクロールバーは自前で生成し制御しています)

独自コントロールにMouseWheelイベントを追加したのですが
同時にSplitContainerのPanel上のスクロールバーも動いてしまっています。

調べてみたところMouseWheelイベントを動作させるためには
コントロールにフォーカスがある必要があるのですが独自コントロールはPanelのためフォーカスを持つことができません。
(独自コントロールをアクティブにしようとすると親コントロールであるSplitContainerがアクティブになる)

SplitContainerがアクティブにならないようにすればよいかと思い、Enterイベントを受け取ったら
FormをアクティブにしてFormのMouseWheelイベントで独自コントロールの処理を行おうとしましたが
どこかのタイミングでSplitContainerがアクティブになってしまいます。


SplitContainerのPanel上のMouseWheelイベントを動作させない方法はないでしょうか?


何かアドバイス、他のアプローチなどありましたらよろしくお願いします。

引用返信 編集キー/
■49509 / inTopicNo.2)  Re[1]: スプリットコンテナのマウスホイールイベントを制御したい
□投稿者/ Hongliang (621回)-(2010/05/06(Thu) 23:55:09)
MouseWheel イベントは、フォーカスがあるコントロールから順に、コンテナを遡って連鎖的に発生します。お書きの例の場合、Button ->「独自コントロール」-> SplitContainer.Panel1 -> SplitContainer という具合です。
さて、MouseWheel イベントは MouseEventHandler 型のためイベント引数は MouseEventArgs ですが、その実体は HandledMouseEventArgs です。
MouseWheel イベントのチェーンは、この HandledMouseEventArgs の Handled が true に設定された時点で終了し、それより先祖の MouseWheel の処理が行われなくなります。

> 独自コントロールにMouseWheelイベントを追加したのですが
> 同時にSplitContainerのPanel上のスクロールバーも動いてしまっています。
スクロールバー「も」、という表現からして、独自コントロールのスクロール自体は巧くできていると推測されます。
ですので、上記のように、イベント引数 e を HandledMouseEventArgs にキャストして処理済みマークを行うだけで事足りると思います。
引用返信 編集キー/
■49536 / inTopicNo.3)  Re[2]: スプリットコンテナのマウスホイールイベントを制御したい
□投稿者/ あぴす (10回)-(2010/05/07(Fri) 14:46:32)
Hongliangさん、回答ありがとうございます。
ご指摘通り、独自コントロール内のMouseWheelイベント内で
イベント引数 e を HandledMouseEventArgs にキャストして処理済みマークすることで
期待通りの動作を実現することができました。

MouseWheelイベントがコンテナを遡って連鎖的に発生することや
MouseEventArgs の実体がHandledMouseEventArgsであることなど
知らないことでしたので助かりました。今後も役に立ちそうな知識です。

ありがとうございましたm(_ _)m
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -