更改背景时,自定义控件会闪烁

时间:2011-10-09 17:34:49

标签: c# winforms .net-4.0 custom-controls

我有一个自定义控件,上面有其他控件。当用户点击它时,我递归地浏览所有控件并将其背景颜色更改为蓝色。但是,由于控件单独改变颜色,因此出现大量闪烁问题。我启用了双缓冲,但我怀疑它是否优化了我的绘图。我怀疑这可能不是做这种效果的最佳方式。

如何摆脱这种闪烁?或者有更好的方法吗?

我的电话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();

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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