【发布时间】:2011-08-08 14:35:42
【问题描述】:
我对 winforms 和鼠标滚轮事件有一点问题。 我有一个代表滑块的自定义用户控件。现在,我有几组滑块,其中每组都包裹在一个面板内。然后,所有组都包装在另一个面板中(将 AutoScroll 设置为 true),并包装在一个表单中。滑块逻辑的实现使得鼠标滚轮可用于更改其值。为此,当鼠标悬停在滑块上时,滑块用户控件将获得焦点。但是,当我滚动时,AutoScroll 父面板也会随之滚动。 我已经在这个问题上浪费了很多时间。任何人都知道这里发生了什么以及我该如何解决它?我认为该事件正在冒泡到父面板,但是在 Slider 控件中处理它时,我没有在该事件上找到 Handled 属性(与 WPF 一样)。
非常感谢
【问题讨论】:
-
我认为滚动只受焦点所在的项目的影响,而不仅仅是悬停在它上面。
-
@MPelletier 它不同。例如在 Outlook 中它是通过悬停,但在 Visual Studio 中它是通过焦点
-
我使用 MouseEnter 事件来集中我的用户控件。这样我就可以在我的聚焦滑块 UserControl 上使用 MouseWheel。滚轮工作完美,唯一的问题是父面板也同时滚动。
-
什么是“滑块”?在可滚动面板内使用 TrackBar 时,我没有得到任何重现。
-
@Hans Passant:我们将 Slider 实现为具有自己外观的完整自定义用户控件(继承 UserControl 类)。当鼠标悬停在控件上时,我们对用户控件进行选择(焦点),然后使用 MouseWheel 更改滑块的值。除了父 AutoScroll 面板也滚动的问题外,这非常有效。当鼠标离开用户控件时,焦点变为父控件,使用鼠标滚轮时滑块的滚动按预期停止。