- - PR -
マウスホイールによるパネルのスクロールを抑止
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-16 21:20
【環境】
.NET Framework1.0 SP2 Windows 2000 Pro 【相談内容】 ・Windows フォームに、パネルが含まれる。 ・パネルには、データグリッドが含まれる。 ・データグリッドはパネルの幅より広い。 ・パネルの AutoScroll プロパティは true で、水平スクロールバーが表示される。 ・データグリッドには多くのレコードがあり、垂直スクロールバーが表示される。 ・パネルには垂直スクロールバーはない。 ・データグリッドには水平スクロールバーはない。 上記の条件でフォーカスがデータグリッドにあるとき、マウスホイールを動かすと、パネルの水平スクロールバーとデータグリッドの垂直スクロールバーが動いてしまいます。 データグリッドの垂直スクロールバーのみが動くようにするにはどうすればよいでしょうか。 よろしくお願いします。 [ メッセージ編集済み 編集者: にし 編集日時 2005-05-17 11:01 ] | ||||
|
投稿日時: 2005-05-17 11:50
動作確認したわけじゃないし、いまひとつスマートじゃないけど・・・
WndProcでWM_MOUSEEHEELメッセージを握り潰すとか。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||
|
投稿日時: 2005-05-17 13:05
私もまだ確認していませんが、これだと縦スクロールも無効になるような気がします。。。 | ||||
|
投稿日時: 2005-05-18 19:56
実際に書き始めて基本的なことがわかっていないことに気がつきました。 WndProc で WM_MOUSEWHEEL を引っ掛け、スルー(無視)すればよいのですよね?たぶん。 そもそも、WndProc メソッド内で、WM_MOUSEWHEEL を判定する方法がわかりません。 引数 m でどう判定していいものやら。 お手数おかけしますが、解説よろしくおねがいします。 [ メッセージ編集済み 編集者: にし 編集日時 2005-05-18 19:57 ] | ||||
|
投稿日時: 2005-05-19 07:33
下のような感じで処理できると思いますけど。
| ||||
|
投稿日時: 2005-05-19 10:25
甕星さん、ありがとうございました。
できました。 動きとしては、OnMouseWheelメソッドをオーバーライドして、base.OnMouseWheel を実行しない方法と同じでした。 下記の方法で作成することにしました。 ・水平スクロールバーはパネルのものを使用 ・垂直スクロールバーはパネルの外に作成 ・パネルの WndProc で WM_MOUSEWHEEL をスルー または、OnMouseWheelをオーバーライドして中身を空。(WndProcでは頻繁に処理が走るので後者のほうが良いかな) パネル内でマウスホイールを動かすと、アクティブセルが可視となるよう、勝手に水平スクロールしてしまいます。 これは妥当な動作だと考えます。 (もともとの現象は可視目的ではなく、無条件に水平スクロールバーをスクロールさせる動きでした。) しかし、垂直スクロールバーが常に表示されていますので、これを使用すればアクティブセルにかかわらず、単純に垂直スクロールのみ行います。 アドバイスいただき、ありがとうございました。 [ メッセージ編集済み 編集者: にし 編集日時 2005-05-19 18:27 ] |
1