"闪烁"由于在移动时被绘制的图片框

时间:2015-04-01 20:34:35

标签: c# winforms graphics

我正在创建一个程序,用户可以使用GUI创建配置文件,将命令绑定到不同的不相关程序的某些键。在这个程序中,我有一个复选框,允许用户选择使用DVORAK布局或QWERTY布局。我有PictureBox-es用于每个键的图像。当用户选中DVORAK布局的复选框时,程序会重新排列这些图片框,使它们现在处于DVORAK布局而不是QWERTY格式。当发生这种情况时,大约90%的时间在移动之前绘制了一些键,留下1个框架,其中有键重叠或缺少键,导致一种"闪烁"。

我想知道是否有任何方法可以等到表单的绘制调用完成之后,然后重新排列键以给予他们重新排列的最大可能时间。我需要能够知道直到下一次绘制调用的时间(或者如果每次绘制调用之间有一个恒定的时间,自上次绘制调用以来的时间也可以工作)等待那段时间,然后重新排列图片盒。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我遇到了与TreeViews类似的问题。而且,与TreeViews一样,PictureBox没有DoubleBuffered属性。所以我使用TreeView作为基础创建了一个新控件。

这是该类的PictureBox版本:

public class PictureBoxNoFlicker : PictureBox {
    public PictureBoxNoFlicker() {
        this.SetStyle(ControlStyles.DoubleBuffer, true);
        this.SetStyle(ControlStyles.UserPaint, true);
        this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    }
} 

此代码复制双缓冲。只需使用此控件而不是标准PictureBox。

不幸的是,我无法重现你的问题,所以我采取了一些措施,并希望这能解决你的问题。