2013-03-05 86 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); 
      } 
     }