如何在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; } } }
- 创建导入的MEF部件的多个实例
- 我如何使用另一个身份在asp.net中执行我的代码,前提是我有一个用户名和密码
- WinRT Xaml ListView – Touch不能很好地滚动
- C#应用程序如何为此实现字典或哈希表?
- 使用空赋值修复“使用未分配的局部变量”。 为什么?
- asp.net 5.0 project.json中RavenDB.Client引用的问题
- 由客户端看不到相同类型的Web服务引发的自定义exception(使用共享程序集)
- 如何从调用方法的InvocationExpressionSyntax节点获取IMethodSymbol或方法声明的语法节点?
- 是否在C#中inheritance了隐含/显式转换方法?