我正在创建一个程序,用户可以使用GUI创建配置文件,将命令绑定到不同的不相关程序的某些键。在这个程序中,我有一个复选框,允许用户选择使用DVORAK布局或QWERTY布局。我有PictureBox-es用于每个键的图像。当用户选中DVORAK布局的复选框时,程序会重新排列这些图片框,使它们现在处于DVORAK布局而不是QWERTY格式。当发生这种情况时,大约90%的时间在移动之前绘制了一些键,留下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。
不幸的是,我无法重现你的问题,所以我采取了一些措施,并希望这能解决你的问题。