簡體   English   中英

背景顏色變化時閃爍

[英]Flickering on background colour change

我有一個很大的面板,里面有許多子面板。 這些子面板的內部是具有透明背景的兩個文本字段。 它本質上是從頭開始構建的ListBox。

我想做的是在每個子面板中循環,並在用戶單擊一個面板時將其背景色更改為選定的顏色。

但是,當我單擊一個新的子面板時,舊的背景色和新的背景色之間會出現非常明顯的閃爍。

http://i.imgur.com/ROHYu.png

注意:當用戶將鼠標懸停在面板上時,淺藍色是突出顯示的顏色。

我嘗試將主面板和表單本身的DoubleBuffered設置為true,但運氣不佳。 我也嘗試將ControlStyles.AllPaintingInWmPaint,ControlStyles.UserPaint和ControlStyles.OptimizedDoubleBuffer設置為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;
        }
    }
}

所以我想知道是否有人有什么想法?

在這里查看我的答案:

WinForms-Form.DoubleBuffered屬性會影響放置在該窗體上的控件嗎?

基本上,在父控件上設置DoubleBuffered不會滴入子控件。 嘗試我在該答案中提出的技巧,看看是否對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM