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

C# 如何可靠地检测鼠标何时离开控件?,c#,.net,winforms,C#,.net,Winforms,我有许多带有包含按钮的工具条的控件。当鼠标进入toolstrip时,我需要显示或隐藏一些按钮。我知道神秘肉不好,但这是我必须做的 ToolStrip的MouseEnter事件在鼠标进入时触发,但MouseLeave并不总是在鼠标离开时触发。我认为这可能是因为鼠标已经从一个孩子身上变成了控制之外,没有经过控制本身 如何可靠地检测鼠标何时离开控件?仅当控件拥有鼠标捕获时,MouseLeave才会触发。使用全局钩子怎么样: 因此,您将能够管理自己获得正确的结果。我将远离全局挂钩 引自: 注意,您应该使

我有许多带有包含按钮的工具条的控件。当鼠标进入toolstrip时,我需要显示或隐藏一些按钮。我知道神秘肉不好,但这是我必须做的

ToolStrip的MouseEnter事件在鼠标进入时触发,但MouseLeave并不总是在鼠标离开时触发。我认为这可能是因为鼠标已经从一个孩子身上变成了控制之外,没有经过控制本身


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

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

使用全局钩子怎么样:


因此,您将能够管理自己获得正确的结果。

我将远离全局挂钩

引自:

注意,您应该使用全局钩子 仅用于调试目的; 否则,你应该避开它们。 全局钩子会影响系统性能 与他人发生冲突 实现相同功能的应用程序 全局钩子的类型

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


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

我无法重现此行为。我在面板中的toolstrip中创建了一个按钮,并在没有面板的情况下尝试了它。当鼠标分别离开按钮和工具条时,我总是为按钮和工具条获取MouseLeave事件,即使窗体没有焦点并且鼠标直接从按钮跳到桌面。我正在将Visual C 2008 Express与.NET 3.5 SP1一起使用。