gpt4 book ai didi

c# - "always"捕获鼠标滚轮事件并滚动父级?

转载 作者:行者123 更新时间:2023-11-30 22:28:53 29 4
gpt4 key购买 nike

我有一个 winforms 应用程序,它使用多个 UserControl 填充一个可滚动区域。我的问题是,只要此应用程序 View 可见,是否始终捕获鼠标滚轮滚动?当然,这个应用程序正在为焦点而活跃。

现在我必须单击显示的所有控件的滚动条,您可以滚动槽以使鼠标滚轮滚动工作。我想忽略或跳过这个。我希望能够单击放置在可滚动区域中的这些 UserControls 之一的文本字段之一,然后如果我通过鼠标滚轮滚动,则此 UserControl 不应该是尝试滚动的那个,但是这个可滚动的此 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 );
}

关于c# - "always"捕获鼠标滚轮事件并滚动父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530045/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com