TabControl闪烁

Fra*_*amp 2 c# tabcontrol flicker winforms

我有一个TabControl,我在其中添加/删除了几个TabPages.

当我添加足够的页面以便必须显示导航按钮时,我会出现闪烁问题.

当导航按钮(左向右导航2个箭头)未显示时,我根本没有闪烁.闪烁与要添加的表单或页面的大小调整无关.

我试过了:

  • DoubleBuffering
  • SetStyles(......提高性能的所有参数)

编辑:在我的主WinForm中,我添加了此代码,以防止在调整窗口大小时出现渲染错误:

protected override CreateParams CreateParams 
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;
        return cp;
    }
}
Run Code Online (Sandbox Code Playgroud)

删除后,我的TabControl中不再出现闪烁现象.似乎我将不得不忍受调整大小渲染错误,因为持续闪烁更方便.

Han*_*ant 7

你遗漏了一个重要的细节. 这个问题强烈建议你做的比你描述的要多,你还要覆盖表单中的CreateParams属性,以打开窗口的WS_EX_COMPOSITED样式标志.它可以为表单及其所有控件启用双缓冲,这是抑制闪烁的一种好方法.

但它可能会产生一些有害的副作用.TabControl实际上是一个麻烦制造者,有些混淆了它呈现的方式与WS_EX_COMPOSITED不兼容.一旦添加了太多选项卡并显示导航按钮,它就会开始不断重绘自己.被视为快速闪烁.本机选项卡控件渲染器有很多错误,编写它的Microsoft团队做了一个非常糟糕的工作.

对于这个bug没有已知的解决方法,你必须选择较少的替代方案.