如何在C#中对Panel进行双重缓冲?

我有一个面板上有一个轮盘赌轮,我需要双重缓冲面板,以便它停止闪烁。 谁能帮我吗?

〜T-福克斯

编辑:

是的,我试过了。

panel1.doublebuffered不存在,只有this.doublebuffered。 我不需要缓冲表格,只需要面板。

您需要从Panel或PictureBox派生。

这取决于您选择启用缓冲的方式。

如果你设置this.DoubleBuffer标志,那么你应该没问题。

如果手动更新样式,则必须自己在WM_PAINT中绘制表单。

如果你真的有野心,你可以维护和绘制自己的后台缓冲区作为位图。

 using System.Windows.Forms; public class MyDisplay : Panel { public MyDisplay() { this.DoubleBuffered = true; // or SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); UpdateStyles(); } } 

另一种方法是使用InvokeMember方法调用doublebuffered成员:

  typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, panel2, new object[] { true }); 

通过这种方式,您不必创建子类

Winform面板具有DoubleBuffered属性 。

编辑:我应该注意到它受到了保护。 其他人已经描述了如何对它进行分类。 🙂

您可以在派生的Panel类中公开DoubleBuffered -Property:

 public class DoubleBufferedPanel : Panel { [DefaultValue(true)] public new bool DoubleBuffered { get { return base.DoubleBuffered; } set { base.DoubleBuffered = value; } } }