1

我有一个覆盖在其他控件上的用户控件。一个按钮将其打开,我希望它Visible = false在鼠标离开时隐藏()。我应该使用什么事件?我试过Leave了,但只有在我手动隐藏它后才会触发。我也想过MouseLeave,但从来没有被解雇过。

编辑:控件由 aListView和 a组成,Panel其中有一堆按钮。它们直接停靠在控件中,没有顶级容器。

4

1 回答 1

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;
  }
}
于 2013-10-31T09:29:20.400 回答