-1

私は ToolStripButton コントロールに基づいて CustomControl を作成しています。マウスがいつボタンをホバーして別の方法で描画するかを知りたいと思っています。ここに私のコードの簡単なビューがあります:

    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);
        }
    }

私の問題は、デバッグ パネルで Mouse IN と Mouse OUT が正しいことを明確に確認できるため、変数を正しく設定する必要がありますが、OnPaint イベントでは、m_IsHover 条件を入力しないことです ...

私は本当に問題が何であるかを理解していません、それはとても簡単に思えます...

4

1 に答える 1

1

The ToolStripItem.Select() method runs on MouseEnter. Call this.Invalidate() to force a repaint.

于 2010-08-16T14:23:47.617 に答える