C# 背景颜色变化时闪烁

C# 背景颜色变化时闪烁,c#,.net,winforms,flicker,C#,.net,Winforms,Flicker,我有一个很大的面板,里面有很多子面板。在这些子面板中有两个透明背景的文本字段。它本质上是从头开始构建的ListBox 我试图做的是在每个子面板之间循环,当用户单击一个面板时,将其背景颜色更改为选定的颜色 然而,当我点击一个新的子面板时,在旧的背景色和新的背景色之间有一个非常明显的闪烁 注:当用户将鼠标悬停在面板上时,浅蓝色是突出显示的颜色 我曾尝试将主面板和窗体本身的DoubleBuffered设置为true,但运气不太好。我还尝试将ControlStyles.AllPaintingInWmP

我有一个很大的面板,里面有很多子面板。在这些子面板中有两个透明背景的文本字段。它本质上是从头开始构建的ListBox

我试图做的是在每个子面板之间循环,当用户单击一个面板时,将其背景颜色更改为选定的颜色

然而,当我点击一个新的子面板时,在旧的背景色和新的背景色之间有一个非常明显的闪烁

注:当用户将鼠标悬停在面板上时,浅蓝色是突出显示的颜色

我曾尝试将主面板和窗体本身的DoubleBuffered设置为true,但运气不太好。我还尝试将ControlStyles.AllPaintingInWmPaint、ControlStyles.UserPaint和ControlStyles.OptimizedDubleBuffer设置为true

public class List : Panel
{
    private Panel[] items;
    private Label[] header; // Children of items
    private Label[] footer; // Children of items

    public List()
    {
        SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        SetStyle(ControlStyles.UserPaint, true);
        SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

        AutoScroll = true;
        BackColor = Color.White;
        //DoubleBuffered = true;
        HorizontalScroll.Visible = false;
        HorizontalScroll.Enabled = false;
        VerticalScroll.Visible = true;
        VerticalScroll.Enabled = true;
    }

    public void renderItemsSelected(Color color)
    {
        for (int q = 0; q < itemsSelected.Count; q++)
        {
            int i = getPos();

            items[i].BackColor = color;
        }
    }
}
公共类列表:面板
{
私人小组[]项目;
私有标签[]头;//项的子项
私有标签[]页脚;//项的子项
公开名单()
{
设置样式(ControlStyles.AllPaintingInWmPaint,true);
SetStyle(ControlStyles.UserPaint,true);
SetStyle(ControlStyles.OptimizedDoubleBuffer,true);
AutoScroll=true;
背景色=颜色。白色;
//双缓冲=真;
水平滚动。可见=假;
HorizontalScroll.Enabled=false;
VerticalScroll.Visible=true;
VerticalScroll.Enabled=true;
}
已选择公共空心渲染器(颜色)
{
对于(int q=0;q
所以我想知道是否有人有什么想法?

请看我的答案:


基本上,在父控件上设置DoubleBuffered不会向下延伸到子控件。试试我在回答中提出的方法,看看是否对您有效。

为“items”数组中的每个项启用双缓冲是有效的。谢谢