TabControl闪烁

时间:2013-06-04 18:54:21

标签: c# winforms tabcontrol flicker

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

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

当导航按钮(左箭头导航2个箭头)时,完全没有闪烁。未显示。闪烁与正在添加的表单或页面的大小调整无关。

我试过了:

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

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

protected override CreateParams CreateParams 
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;
        return cp;
    }
}

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

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:0)

嗨我可能有点迟到回答,但我在this.Multiline = true;中使用了TabControl。这将允许TabControl自动调整多行中的标签,以防多少标签超出可用的可视空间。

除非您有非常具体的要求将所有标签保持在一行中,否则您将使用此功能。