我有一个覆盖在其他控件上的用户控件。一个按钮显示它,我希望它在鼠标离开时隐藏(Visible = false
)。我应该使用什么事件?我尝试了Leave
,但只有在我手动隐藏它之后才会触发。我也考虑过MouseLeave
,但这种情况从未被解雇过。
编辑:控件由ListView
和Panel
组成,其中包含一串按钮。它们直接停靠在控件中,没有顶级容器。
答案 0 :(得分:0)
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;
}
}