我有一个面板,上面有一个轮盘赌轮,我需要对面板进行双缓冲,这样它就不会闪烁。有人能帮我吗?
编辑:
是的,我试过了。
panel1.doublebuffered不存在,只存在this.doublebuffered。我不需要缓冲表单,只需要缓冲面板。
发布于 2009-05-04 00:57:43
您需要从面板或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();
}
}发布于 2015-07-22 20:17:07
另一种方法是使用InvokeMember方法调用成员doublebuffered:
typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty
| BindingFlags.Instance | BindingFlags.NonPublic, null,
panel2, new object[] { true }); 通过这种方式,您不必创建子类
发布于 2013-11-11 04:00:43
可以在Panel的派生类中公开DoubleBuffered-Property
public class DoubleBufferedPanel : Panel
{
[DefaultValue(true)]
public new bool DoubleBuffered
{
get
{
return base.DoubleBuffered;
}
set
{
base.DoubleBuffered = value;
}
}
}https://stackoverflow.com/questions/818415
复制相似问题