我有一个TabControl,我在其中添加/删除了几个TabPages。
当我添加足够的页面以便必须显示导航按钮时,我会出现闪烁问题。
当导航按钮(左箭头导航2个箭头)时,完全没有闪烁。未显示。闪烁与正在添加的表单或页面的大小调整无关。
我试过了:
编辑:在我的主WinForm中,我添加了此代码以防止在调整窗口大小时出现渲染错误:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
删除后,我的TabControl中不再出现闪烁现象。似乎我将不得不忍受调整大小渲染错误,因为不断闪烁会更方便。
答案 0 :(得分:6)
你遗漏了一个重要的细节。 This question强烈建议您执行的操作比您描述的更多,您还要覆盖表单中的CreateParams属性以打开窗口的WS_EX_COMPOSITED样式标志。它可以为表单及其所有控件启用双缓冲,这是一般抑制闪烁的好方法。
但它可能会产生一些有害的副作用。 TabControl实际上是一个麻烦制造者,有些混淆了它呈现的方式与WS_EX_COMPOSITED不兼容。一旦添加了太多选项卡并显示导航按钮,它就会开始不断重绘自己。被视为快速闪烁。本机选项卡控件渲染器有很多错误,编写它的Microsoft团队做了一件非常糟糕的工作。
这个bug没有已知的解决方法,你必须选择较少的替代方案。
答案 1 :(得分:0)
嗨我可能有点迟到回答,但我在this.Multiline = true;
中使用了TabControl
。这将允许TabControl
自动调整多行中的标签,以防多少标签超出可用的可视空间。
除非您有非常具体的要求将所有标签保持在一行中,否则您将使用此功能。