【发布时间】:2009-09-23 23:29:51
【问题描述】:
我的目标是制作一个浮动工具栏(作为它自己的 C# 应用程序),当用户在我上方使用滚轮时,我想更改可见的按钮。听起来很简单,应该只是这个单行的问题:
MouseWheel += new MouseEventHandler(Form1_MouseWheel);
我遇到的问题是鼠标滚轮处理程序仅在我的应用程序具有焦点时才被调用。这意味着用户必须先单击,然后再单击鼠标滚轮。这对我想做的事情不起作用。
我可以挂钩 MouseHover 事件处理程序,然后调用 form.Activate() 以获得焦点。这是次优的,因为如果用户在将鼠标悬停在我的应用程序上后立即使用滚轮(而不是稍等片刻),焦点仍将位于前一个应用程序上,并且会获得鼠标滚轮事件。
很自然的做法是挂钩 MouseEnter 事件并在那里调用 Activate(),但随后我的应用程序没有出现在前面,它的图标开始在任务栏上闪烁。我用的是Win7,但是这个问题可能比这个更老。
理想情况下,我想做的是检测鼠标滚轮事件,而不必担心我的应用程序是否有焦点。前一个应用程序保持输入焦点确实会更好,例如,如果用户在记事本中,他们可以键入,将鼠标悬停在我的应用程序上,使用滚轮,查看他们看到的内容并决定继续在记事本中输入.理想情况下,我不希望他们在这种情况下必须点击一次。
不过,如果没有其他方法,我会选择将焦点转移到我的应用程序的解决方案。
到目前为止,我使用 C# 和 Windows 窗体,但如果可以解决我的问题,我愿意使用不同的东西。
那么:我如何才能看到那些鼠标滚轮事件,而无需用户先单击以聚焦我的应用程序?
【问题讨论】:
标签: c# winforms mousewheel