2009-11-02 72 views
0

我有一些ToolStrips包含按钮的控件。当鼠标进入工具条时,我需要显示或隐藏一些按钮。我知道神秘肉不好,但这是我必须做的。如何可靠地检测鼠标何时离开控件?

当鼠标进入时,ToolStrip的MouseEnter事件触发,但MouseLeave并不总是在鼠标离开时触发。我认为这可能是因为鼠标已经从小孩内部转移到了不受控制的范围之外,而没有通过控制本身。

如何可靠地检测鼠标何时离开控件?

+0

我无法重现此行为。我在一个面板的工具栏内创建了一个按钮(并且在没有面板的情况下也尝试了它)。即使当窗体没有焦点并且鼠标直接从按钮跳转到桌面时,当鼠标分别离开按钮和工具栏时,我总会为按钮和工具栏获取MouseLeave事件。我正在使用.NET 3.5 SP1的Visual C#2008 Express。 – BlueMonkMN 2009-11-02 23:59:20

回答

0

只有当控件拥有鼠标捕获时,MouseLeave才会触发。

0

我会远离全局钩子。

引用自:MSDN

注意您应该使用全局钩子 仅用于调试目的;否则,你应该避免它们。 全局挂钩会伤害系统性能 并导致与实施全局挂钩类型相同的其他 应用程序发生冲突。

一旦你的应用程序丢失了重点事件,就更难处理了。重新评估您的业务规则。

也许你需要做的是在失去焦点时禁用你的应用程序。这将强制用户在使用工具条之前单击或选择您的应用程序。此时,您可以捕获Control.GotFocus事件并执行所需的任何逻辑。

相关问题