2010-08-16 5 views
-1

Je fais un CustomControl basé sur un contrôle ToolStripButton, j'essaie de savoir quand la souris est Hover le bouton pour dessiner différemment. Voici un aperçu rapide de mon code:Vraiment étrange problème d'événement 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); 
     } 
    } 

Mon problème est que je vois clairement dans le panneau de débogage souris IN et souris OUT sont à droite, si variable doit être correctement réglée, mais en cas OnPaint, je jamais entrer dans le m_IsHover ... conditionnel

Je ne comprends vraiment pas ce que le problème est, il semble si facile ...

+0

J'ai quelques indices, en fait l'événement OnPaint n'est pas appelé quand la souris entre, c'est seulement l'appel quand la souris sort. Mais c'est étrange, il semble que ce soit un autre événement qui est appelé pour dessiner le bouton quand la souris est dedans. Mais lequel? – Karnalta

Répondre

1

la méthode ToolStripItem.Select() fonctionne sur MouseEnter. Appelez this.Invalidate() pour forcer un repeint.