2010-08-16 57 views
-1

我正在做一個基於ToolStripButton控件的CustomControl,我想知道什麼時候鼠標懸停按鈕來繪製它的不同。這裏是我的代碼快速查看:真的很奇怪的ToolStripButton事件問題

private bool m_IsHover = false;   

    ... 

    protected override void OnMouseEnter(EventArgs e) 
    { 
     m_IsHover = true; 
     Debug.WriteLine("Mouse IN"); 
     base.OnMouseEnter(e); 
    } 

    protected override void OnMouseLeave(EventArgs e) 
    { 
     m_IsHover = false; 
     Debug.WriteLine("Mouse OUT"); 
     base.OnMouseLeave(e); 
    } 

    ... 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     // Define rectangle used to draw 
     Rectangle borderRec = new Rectangle(0, 0, this.Width - 1, this.Height - 1); 

     if (m_IsHover) 
     { 
      // Draw border 
      e.Graphics.DrawRectangle(m_BorderPen, borderRec); 

      ... 
     } 
     else 
     { 
      // Default draw 
      base.OnPaint(e); 
     } 
    } 

我的問題是,我在調試面板鼠標和鼠標OUT是正確清楚地看到,所以變量應設置正確,但在OnPaint事件,我在m_IsHover conditionnal永遠不會進入...

我真的不明白是什麼問題,它似乎很容易...

+0

我有一些線索,其實OnPaint事件在鼠標進入時沒有調用,只是在鼠標移出時才調用。但奇怪的是,它似乎是另一個被鼠標拖拽的按鈕,但是哪一個? – Karnalta 2010-08-16 13:30:42

回答

1

的ToolStripItem.Select()方法的MouseEnter運行。調用this.Invalidate()強制重繪。