Действительно странная проблема события ToolStripButton - PullRequest
0 голосов
/ 16 августа 2010

Я делаю 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);
        }
    }

Моя проблема в том, что я ясно вижу на панели отладки, что Mouse IN и Mouse OUT верны, поэтому переменная должна быть правильно установлена, но в событии OnPaintЯ никогда не вхожу в условную строку m_IsHover ...

Я действительно не понимаю, в чем проблема, кажется, это так просто ...

1 Ответ

1 голос
/ 16 августа 2010

Метод ToolStripItem.Select () выполняется в MouseEnter.Вызовите this.Invalidate (), чтобы вызвать перерисовку.

...