自定义控件在改变背景时闪烁

本文关键字:闪烁 背景 改变 自定义控件 | 更新日期: 2023-09-27 18:10:44

我有一个自定义控件,上面有其他控件。当用户单击它时,我递归地遍历所有控件并将其背景颜色更改为蓝色。然而,当控件单独改变颜色时,我遇到了一个巨大的闪烁问题。我启用了双重缓冲,但我怀疑它是否优化了我的绘图。我怀疑这可能不是达到这种效果的最好方法。

我怎样才能消除这种闪烁?还是有更好的方法?

My call OnClick:

ControlUtils.SetColorRecursive(this, Color.LightSteelBlue);

SetColorRecursive:

    tCtl.SuspendLayout();
        if (tCtl != null)
        {
            // Set Color
            tCtl.BackColor = tColor;
            foreach (Control tSubCtl in tCtl.Controls)
            {
                // Ignore the following
                if (tSubCtl is TextBox) continue;
                if (tSubCtl is ListBox) continue;
                if (tSubCtl is NumericUpDown) continue;
                // Recursively change sub-controls
                SetColorRecursive(tSubCtl, tColor);
            }
        }
    tCtl.ResumeLayout();

自定义控件在改变背景时闪烁

您是否在每个重新着色的控件的背景上启用了双重缓冲?(-不只是表单)

我发现这解决了我在Vista及以上版本上的问题。WinXP用户可能是SOL。

    protected override CreateParams CreateParams
    {
        get
        {
            // This eliminates child control flicker when selecting
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x02000000;
            return cp;
        }
    }