2013-03-05 58 views
1

我一张有2个按钮的面板。我想要做的是,当鼠标位于面板区域内时,按钮可见,并且当鼠标位置离开面板区域时,按钮不可见。的WinForms C#按钮能见度

我使用面板上的MouseEnterMouseLeave事件。

MouseEnter我做button.Show()MouseLeave我做button.Hide();

这看起来很简单,但是当按钮是可见的(鼠标在面板区域内),它们是不可点击(click事件不会被触发)。

一些调试显示,当鼠标位于按钮上时,事件MouseEnterMouseLeave不断被调用。

对此有何建议?这应该很容易完成,我实际上没有想法。

+0

尝试添加button.Enabled = TRUE; – abc 2013-03-05 09:50:26

+0

忘记说按钮被启用也是'MouseEnter'。 – guanabara 2013-03-05 09:53:01

回答

4

发生这种情况的原因是,当鼠标悬停在任何按钮事件上时MouseLeave在面板上被触发,因此按钮再次不可见并且鼠标重新回到面板上,因此立即触发MouseEnter并将其显示回来。

通过添加一些标志,如果你是属于该面板中,如果这样不掩饰他们的任何控制,在MouseLeave事件检查修复你的逻辑。

编辑:在这里你有一个例子,以解决您的问题 - MouseEnter and MouseLeave events from a Panel and its child controls

0

这里是由gzaxx称为其他主题中提出的解决方案

protected override void OnMouseLeave(EventArgs e) 
     { 
      if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition))) 
       return; 
      else 
      { 
       base.OnMouseLeave(e); 
      } 
     }