【发布时间】:2015-03-02 13:46:13
【问题描述】:
我有一个UserControl 派生控件。当用户移动鼠标滚轮时,我想捕捉并响应它。
我尝试使用 Scroll 事件,但它似乎永远不会触发,我猜这是因为我的控件没有(或不需要)滚动条。
我在 Windows 窗体设计器中找不到 MouseWheel 事件,尽管 the docs 建议它应该是每个 Control 派生元素的一部分。同样,the docs 建议 UserControl 是派生的,因此它应该支持该事件。
我错过了什么?
【问题讨论】:
-
WM_MOUSEWHEEL 消息被发送到具有焦点的窗口。那永远不会是您的用户控件,它无法获得焦点。事件隐藏在设计器中的基本原因。它将是 UC 内部的一个控件。只有当它不处理消息时,它才会传递给父级。我们无法猜测您在 UC 中设置了哪些控件,或者您的问题的焦点在哪里。
-
我的 UserControl 里面没有控件——它只是处理
OnPaint甚至做一些绘图。我查看了父System::Windows::Forms::Form并且似乎也没有 MouseWheel 事件。根据您的说法,父母目前正在处理该事件? -
如果您不将
UserControl用作其他控件的容器,您是否考虑过从PictureBox(或类似的)继承? -
不,我没有。这会有帮助吗?
-
如果您没有在其中放置任何控件,那么使用 UC 就毫无意义。只需从 Control 派生您的类即可。现在它可以获得焦点并且确实有一个 MouseWheel 事件。不要使用 PictureBox,它也无法获得焦点。确保用户可以告诉您的控件有焦点,您需要绘制一个焦点矩形。
标签: .net winforms scroll user-controls