2012-05-10 5 views
2

私はいくつかのUserControlsとスクロール可能な領域を設定するwinformsアプリケーションがあります。 私の質問ですが、このアプリケーションビューが表示されている限り、マウスホイールのスクロールを常にキャプチャすることはありますか?もちろん、このアプリケーションはフォーカスのためにアクティブです。「常に」マウスホイールイベントとスクロールペアレントをキャプチャしますか?

今はマウスホイールのスクロールを行うためにトラフをスクロールできるすべてのコントロールに表示されるスクロールバーをクリックする必要があります。これを無視したり、スキップしたりしたいと思います。スクロール可能な領域に配置されているこれらのUserControlのテキストフィールドの1つをクリックしてマウスホイールでスクロールすると、このUserControlはスクロールしようとしてはいけませんが、このUserControlが他のすべてのUserControlと配置されている領域(親)。メインフォームで

答えて

3

実装IMessageFilter

public partial class YourForm : Form, IMessageFilter 
{ 
    // Your code. 

    public bool PreFilterMessage (ref Message m) 
    { 
     if (m.Msg == 0x20A) 
     { 
      NativeMethods.SendMessage (controlToScroll.Handle , m.Msg , m.WParam , m.LParam); 
      return true; 
     } 
     return false; 
    } 
} 

は、それのコンストラクタで、次の呼び出しによってメッセージフィルタとしてフォームを登録します。優れた

internal class NativeMethods 
{ 
    [DllImport ("user32.dll" , CharSet = CharSet.Auto)] 
    public static extern IntPtr SendMessage (IntPtr hWnd , Int32 Msg , IntPtr wParam , IntPtr lParam); 
} 
+0

Application.AddMessageFilter (this); 

SendMessageは、次のシグネチャを持っています!ありがとうございました。 –

+0

'IMessageFilter'の実装では不十分だった' WebBrowser'コントロールで同じ問題が発生しました:http://stackoverflow.com/questions/17228033/send-mousewheel-messages-to-system-windows-forms-webbrowser/17228034#17228034をご覧ください。 –

関連する問題