我有一个覆盖在其他控件上的用户控件。一个按钮将其打开,我希望它Visible = false
在鼠标离开时隐藏()。我应该使用什么事件?我试过Leave
了,但只有在我手动隐藏它后才会触发。我也想过MouseLeave
,但从来没有被解雇过。
编辑:控件由 aListView
和 a组成,Panel
其中有一堆按钮。它们直接停靠在控件中,没有顶级容器。
我有一个覆盖在其他控件上的用户控件。一个按钮将其打开,我希望它Visible = false
在鼠标离开时隐藏()。我应该使用什么事件?我试过Leave
了,但只有在我手动隐藏它后才会触发。我也想过MouseLeave
,但从来没有被解雇过。
编辑:控件由 aListView
和 a组成,Panel
其中有一堆按钮。它们直接停靠在控件中,没有顶级容器。
UserControl
实际上是一个面板,上面有一些控件,以便于重用(它具有设计时支持的优势)。实际上,当您将鼠标移出 时UserControl
,其子控件之一会触发MouseLeave
,而不是其UserControl
本身。Application-wide MouseLeave
我认为你必须为你实现一些UserControl
这样的:
public partial class YourUserControl : UserControl, IMessageFilter {
public YourUserControl(){
InitializeComponent();
Application.AddMessageFilter(this);
}
bool entered;
public bool PreFilterMessage(ref Message m) {
if (m.Msg == 0x2a3 && entered) return true;//discard the default MouseLeave inside
if (m.Msg == 0x200) {
Control c = Control.FromHandle(m.HWnd);
if (Contains(c) || c == this) {
if (!entered) {
OnMouseEnter(EventArgs.Empty);
entered = true;
}
} else if (entered) {
OnMouseLeave(EventArgs.Empty);
entered = false;
}
}
return false;
}
}