自定义控件在改变背景时闪烁
本文关键字:闪烁 背景 改变 自定义控件 | 更新日期: 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;
}
}