如何避免WinForms TabPage控件出现闪烁问题?
解决WinForms TabPage 闪烁问题的两种方法
一、子类化TabPage
直接自定义TabPage子类,在构造函数中开启双缓冲:
public class DoubleBufferedTabPage : TabPage { public DoubleBufferedTabPage() => DoubleBuffered = true; public DoubleBufferedTabPage(string text) : base(text) => DoubleBuffered = true; }
使用时,将原TabPage替换为该自定义类即可:
- 代码动态添加:
tabControl1.TabPages.Add(new DoubleBufferedTabPage("缓冲页面")); - 设计器中可手动修改TabPage的类型为
DoubleBufferedTabPage
二、反射设置已有TabPage的双缓冲属性
无需子类化,通过反射直接修改TabPage的受保护DoubleBuffered属性:
foreach (TabPage page in tabControl1.TabPages) { typeof(Control).InvokeMember( "DoubleBuffered", System.Reflection.BindingFlags.SetProperty | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic, null, page, new object[] { true }); }
将这段代码放在窗体Load事件或TabControl初始化完成后执行,即可为所有TabPage开启双缓冲。
方法对比
- 子类化方式更规范,类型安全,适合长期维护的项目。
- 反射方式更灵活快捷,适合临时修复或不想新增类的场景。
内容的提问来源于stack exchange,提问作者jw_
相关产品推荐
相关产品推荐

