You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:47:05