真是奇怪的ToolStripButton事件问题

发布于 2024-09-14 16:49:25 字数 1063 浏览 6 评论 0原文

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

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

I am making a CustomControl based on a ToolStripButton control, I am trying to know when the mouse is Hover the button to draw it differently. Here is a quick view of my code :

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

My problem is that I clearly see in the debug panel that Mouse IN and Mouse OUT are right, so variable should be correctly set, but in the OnPaint event, I never enter in the m_IsHover conditionnal ...

I really don't understand what the problem is, it seem so easy ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

安稳善良 2024-09-21 16:49:25

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文