2011-10-09 75 views
0

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

我该如何摆脱这种闪烁?或者有更好的方法来做到这一点?

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

谷歌搜索产生的结果提到了一种称为合成的不同类型的双缓冲。任何人都知道这种方法? – MarkP

回答

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; 
     } 
    } 
+0

XP是支持样式的Windows的第一个版本。 –

0

你对每一个控制的背景下启用双缓冲被重新着色? ( - 不只是表格)

+0

的确,我确实。我找到了解决方案。 – MarkP