滚动时透明控制闪烁

时间:2011-05-11 09:06:30

标签: c# user-interface background transparency

我在C#中创建了一个具有自定义按钮的应用程序。这些都具有透明背景,因此我从Control继承并覆盖CreateParams / OnPaintBackground并添加了InvalidateEx函数。

现在我需要一个类似于网格的布局(TableLayoutPanel),它也是透明的。我再次创建了自己的控件并覆盖CreateParams / OnPaintBackground并添加了InvalidateEx函数。在滚动中,我看到背景“记得”他绘制的内容,因此我看到重影(如果那是正确的单词)。 将InvalidateEx函数连接到Scroll事件只会使面板在滚动时闪烁。

有没有办法去除那个闪烁?

public class GridLayout : TableLayoutPanel
{
    public GridLayout()
    {
        this.Scroll += delegate { this.InvalidateEx(); };
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x20; //Transparent
            return cp;
        }
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        // do nothing
    }

    protected void InvalidateEx()
    {
        if (Parent == null)
            return;

        Rectangle rc = new Rectangle(this.Location, this.Size);
        Parent.Invalidate(rc, true);
    }
}

我想过使用WPF,但我没有相关经验,我需要在几天内创建它 - >的Winforms。

0 个答案:

没有答案