2

スクロール可能な領域に複数のUserControlを配置するwinformsアプリケーションがあります。私の質問ですが、このアプリケーションビューが表示されている限り、マウスホイールのスクロールを常にキャプチャする方法はありますか?そしてもちろん、このアプリケーションはフォーカスのためにアクティブになっています。

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

4

1 に答える 1

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;
    }
}

コンストラクターで以下を呼び出して、フォームをメッセージフィルターとして登録します。

Application.AddMessageFilter ( this );

SendMessage次の署名があります。

internal class NativeMethods
{
    [DllImport ( "user32.dll" , CharSet = CharSet.Auto )]
    public static extern IntPtr SendMessage ( IntPtr hWnd , Int32 Msg , IntPtr wParam , IntPtr lParam );
}
于 2012-05-10T08:54:48.047 に答える