MouseEnter和MouseLeave事件似乎很慢

XenLife

当我尝试更改“面板”和“标签”的背景颜色时,它们似乎彼此之间的变化速度稍慢。
尽管两者都设置为在“面板”和“标签”的“输入/离开”时都进行更改,但是我发现更改时仅相差了半秒。

有人知道我如何才能让它们在相同的时间同时更改,而不管鼠标在哪一个上?

private void panel3_MouseEnter(object sender, EventArgs e)
{
    panel3.BackColor = Color.FromArgb(125, 170, 170, 170);
    label2.BackColor = System.Drawing.Color.Transparent;
}

private void panel3_MouseLeave(object sender, EventArgs e)
{
    panel3.BackColor = Color.FromArgb(125, 45, 45, 45);
    label2.BackColor = System.Drawing.Color.Transparent;
}

private void label2_MouseEnter(object sender, EventArgs e)
{
    panel3.BackColor = Color.FromArgb(125, 170, 170, 170);
    label2.BackColor = System.Drawing.Color.Transparent;
}

private void label2_MouseLeave(object sender, EventArgs e)
{
    panel3.BackColor = Color.FromArgb(125, 45, 45, 45);
    label2.BackColor = System.Drawing.Color.Transparent;
}

这是它在做什么的一个例子。

用户名

我认为由于背景图像/父容器的绘制,您将不断出现这种闪烁,正如我从您的Example中看到的那样请考虑通过子类使用双缓冲控件以减少闪烁。

class DBPanel : Panel
{
    public DBPanel()
    {
        DoubleBuffered = true;
    }
}

当您尝试创建类似的GUI时,我建议创建一个自定义控件,该控件将面板和标签结合在一起,并且还支持双缓冲。

例:

class FancyLabel : Panel
{

    private bool IsMouseEntered;

    public FancyLabel()
    {
        SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor, true);
        DoubleBuffered = true;
        UpdateStyles();
        BackColor = Color.Transparent;
        ForeColor = Color.FromArgb(205, 205, 205);
    }

    protected override void OnMouseEnter(EventArgs e)
    {
        base.OnMouseEnter(e);
        IsMouseEntered = true;
        Invalidate();
    }

    protected override void OnMouseLeave(EventArgs e)
    {
        base.OnMouseLeave(e);
        IsMouseEntered = false;
        Invalidate();
    }

    [System.ComponentModel.Bindable(true)]
    [System.ComponentModel.Browsable(true)]
    public override string Text { get => base.Text; set => base.Text = value; }

    protected override void OnTextChanged(EventArgs e)
    {
        base.OnTextChanged(e);
        Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        Graphics G = e.Graphics;
        G.SmoothingMode = SmoothingMode.HighQuality;
        G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;

        SolidBrush bkBrush = IsMouseEntered ? new SolidBrush(Color.FromArgb(125, 170, 170, 170)) : new SolidBrush(Color.FromArgb(125, 45, 45, 45));

        Rectangle rec = new Rectangle(0, 0, Width - 1, Height - 1);

        G.FillRectangle(bkBrush, rec);

        SolidBrush txtBrush = new SolidBrush(ForeColor);
        StringFormat sf = new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };

        G.DrawString(Text, Font, txtBrush, rec, sf);

        bkBrush.Dispose();
        txtBrush.Dispose();
        sf.Dispose();
    }
}

祝好运。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MouseEnter和MouseLeave事件之间的敏感边界区域

来自分类Dev

vb.net- mouseEnter 和 MouseLeave 事件不起作用

来自分类Dev

Mouseenter和mouseleave闪烁

来自分类Dev

Div Mouseenter和Mouseleave

来自分类Dev

.mouseleave()和.mouseenter()的问题

来自分类Dev

jQuery的mouseenter和mouseleave问题

来自分类Dev

短代码mouseenter和mouseleave

来自分类Dev

mouseenter mouseleave事件有冲突吗?jQuery的

来自分类Dev

如何模拟旧浏览器的mouseenter和mouseleave DOM事件?

来自分类Dev

WordPress中的jQuery-Mouseenter和mouseleave事件的字体超赞反转

来自分类Dev

IE 10的JQuery事件mouseenter和mouseleave没有触发,解决方法?

来自分类Dev

IE 10的JQuery事件mouseenter和mouseleave没有触发,解决方法?

来自分类Dev

禁用和启用mouseenter和mouseleave

来自分类Dev

Mouseenter / Mouseleave上的SVG使用和jQuery

来自分类Dev

jQuery mouseenter()和mouseleave()无法正常工作

来自分类Dev

Mouseenter / Mouseleave上的SVG使用和jQuery

来自分类Dev

mouseenter()和mouseleave()jQuery无法正常工作

来自分类Dev

Numpy数组索引和/或加法似乎很慢

来自分类Dev

使用on()和mouseenter / mouseleave防止闪烁/代码运行过于频繁

来自分类Dev

jQuery mouseenter()和mouseleave()函数可重复使用

来自分类Dev

为什么MouseEnter和MouseLeave不可靠?

来自分类Dev

如何解决mouseenter和mouseleave重叠的难题?

来自分类Dev

使用$(document).on和mouseenter / mouseleave获取DOM元素的ID

来自分类Dev

mouseenter和mouseleave在jQuery中不起作用

来自分类Dev

尝试向图像添加mouseenter和mouseleave函数

来自分类Dev

Mouseenter和Mouseleave触发定时器开/关

来自分类Dev

mouseEnter和mouseLeave在JSP中不起作用

来自分类Dev

jquery.mouseenter()jquery.mouseleave()和子元素的问题

来自分类Dev

我究竟该如何使用mouseenter和mouseleave?

Related 相关文章

  1. 1

    MouseEnter和MouseLeave事件之间的敏感边界区域

  2. 2

    vb.net- mouseEnter 和 MouseLeave 事件不起作用

  3. 3

    Mouseenter和mouseleave闪烁

  4. 4

    Div Mouseenter和Mouseleave

  5. 5

    .mouseleave()和.mouseenter()的问题

  6. 6

    jQuery的mouseenter和mouseleave问题

  7. 7

    短代码mouseenter和mouseleave

  8. 8

    mouseenter mouseleave事件有冲突吗?jQuery的

  9. 9

    如何模拟旧浏览器的mouseenter和mouseleave DOM事件?

  10. 10

    WordPress中的jQuery-Mouseenter和mouseleave事件的字体超赞反转

  11. 11

    IE 10的JQuery事件mouseenter和mouseleave没有触发,解决方法?

  12. 12

    IE 10的JQuery事件mouseenter和mouseleave没有触发,解决方法?

  13. 13

    禁用和启用mouseenter和mouseleave

  14. 14

    Mouseenter / Mouseleave上的SVG使用和jQuery

  15. 15

    jQuery mouseenter()和mouseleave()无法正常工作

  16. 16

    Mouseenter / Mouseleave上的SVG使用和jQuery

  17. 17

    mouseenter()和mouseleave()jQuery无法正常工作

  18. 18

    Numpy数组索引和/或加法似乎很慢

  19. 19

    使用on()和mouseenter / mouseleave防止闪烁/代码运行过于频繁

  20. 20

    jQuery mouseenter()和mouseleave()函数可重复使用

  21. 21

    为什么MouseEnter和MouseLeave不可靠?

  22. 22

    如何解决mouseenter和mouseleave重叠的难题?

  23. 23

    使用$(document).on和mouseenter / mouseleave获取DOM元素的ID

  24. 24

    mouseenter和mouseleave在jQuery中不起作用

  25. 25

    尝试向图像添加mouseenter和mouseleave函数

  26. 26

    Mouseenter和Mouseleave触发定时器开/关

  27. 27

    mouseEnter和mouseLeave在JSP中不起作用

  28. 28

    jquery.mouseenter()jquery.mouseleave()和子元素的问题

  29. 29

    我究竟该如何使用mouseenter和mouseleave?

热门标签

归档