Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;“始终”;捕获鼠标滚轮事件并滚动父对象?_C#_Winforms_User Controls_Scroll_Mousewheel - Fatal编程技术网

C# &引用;“始终”;捕获鼠标滚轮事件并滚动父对象?

C# &引用;“始终”;捕获鼠标滚轮事件并滚动父对象?,c#,winforms,user-controls,scroll,mousewheel,C#,Winforms,User Controls,Scroll,Mousewheel,我有一个winforms应用程序,它用几个用户控件填充一个可滚动区域。 我的问题是,只要此应用程序视图可见,是否始终可以捕获鼠标滚轮滚动?当然,这个应用程序对于焦点是活跃的 现在我必须点击滚动条,它显示了所有的控件,你可以通过滚动来实现鼠标滚轮的滚动。我想忽略或跳过这一点。我希望能够单击位于可滚动区域的其中一个UserControl中的一个文本字段,然后如果我通过鼠标滚轮滚动,则此UserControl不应是尝试滚动的用户控件,而是此可滚动区域(父)此用户控件与所有其他用户控件放在一起。在主窗体

我有一个winforms应用程序,它用几个用户控件填充一个可滚动区域。 我的问题是,只要此应用程序视图可见,是否始终可以捕获鼠标滚轮滚动?当然,这个应用程序对于焦点是活跃的


现在我必须点击滚动条,它显示了所有的控件,你可以通过滚动来实现鼠标滚轮的滚动。我想忽略或跳过这一点。我希望能够单击位于可滚动区域的其中一个UserControl中的一个文本字段,然后如果我通过鼠标滚轮滚动,则此UserControl不应是尝试滚动的用户控件,而是此可滚动区域(父)此用户控件与所有其他用户控件放在一起。

在主窗体中实现
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 );
}

我在
WebBrowser
控件中也遇到了同样的问题,其中实现
IMessageFilter
是不够的:请参阅以获取特定的解决方案。