.net 如何在UserControl中捕获鼠标滚轮事件?

.net 如何在UserControl中捕获鼠标滚轮事件?,.net,winforms,scroll,user-controls,.net,Winforms,Scroll,User Controls,我有一个UserControl派生控件。当用户移动鼠标滚轮时,我想捕捉并响应它 我尝试过使用Scroll事件,但似乎从未触发,我猜这是因为我的控件没有(或需要)滚动条 我在Windows窗体设计器中找不到mouseweel事件,尽管我建议它应该是每个Control派生元素的一部分。再次建议UserControl是派生的,因此它应该支持事件 我遗漏了什么?如果其他人面临这种情况,最后我只是在 要调用用户控件中的功能的父控件: Form1(void) { Initia

我有一个
UserControl
派生控件。当用户移动鼠标滚轮时,我想捕捉并响应它

我尝试过使用
Scroll
事件,但似乎从未触发,我猜这是因为我的控件没有(或需要)滚动条

我在Windows窗体设计器中找不到
mouseweel
事件,尽管我建议它应该是每个
Control
派生元素的一部分。再次建议
UserControl
是派生的,因此它应该支持事件


我遗漏了什么?

如果其他人面临这种情况,最后我只是在 要调用用户控件中的功能的父控件:

    Form1(void)
    {
        InitializeComponent();

        MouseWheel += gcnew MouseEventHandler(this, &Form1::MouseWheelHandler);
    }

    void MouseWheelHandler(Object^ sender, MouseEventArgs^ e)
    {
        m_myUserControl->MouseWheel(e->Delta);
    }

从UserControls获取鼠标事件的解决方案是设置控件的背景。每个面板(网格、画布等)都需要背景色来处理鼠标事件

因此,只需将透明背景添加到控件中,即可捕获滚动事件

Background="Transparent"

WM_MOUSEWHEEL消息被发送到具有焦点的窗口。这永远不是你的用户控制,它无法获得焦点。事件隐藏在设计器中的基本原因。它将是UC内部的一个控件。只有当它不处理消息时,才会将其传递给父级。我们无法从您的问题猜出您在UC中放置了什么控件或焦点在哪里。My UserControl中没有控件-它只处理
OnPaint
,甚至可以进行一些绘图。我查看了父级
System::Windows::Forms::Form
,它似乎也没有鼠标滚轮事件。从您所说的,父控件当前将处理该事件?如果您没有将
UserControl
用作其他控件的容器,您是否考虑过从
PictureBox
(或类似)继承?没有。这会有帮助吗?如果你不在UC中设置任何控件,那么使用UC就毫无意义。只需从控件派生类即可。现在,它可以获得焦点,并有一个鼠标滚轮事件。不要使用图像盒,它也无法获得焦点。确保用户可以告诉你的控件有焦点,你需要画一个焦点矩形。我不理解这一点。如果窗体有
鼠标滚轮
事件。为什么它们不出现在事件列表中呢?因为一些奇怪的原因,它们被隐藏在设计师面前。