真奇怪的是ToolStripButton事件的问题

时间:2010-08-16 13:23:22

标签: c# custom-controls hover toolstripbutton

我正在制作一个基于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 conditionnal ...

我真的不明白问题是什么,看起来很容易......

1 个答案:

答案 0 :(得分:1)

ToolStripItem.Select()方法在MouseEnter上运行。调用this.Invalidate()强制重绘。