为了解决闪烁问题,我求助于在 winforms 应用程序中使用 WS_EX_COMPOSITED
。在选项卡控件获得如此多的选项卡以致于它创建“滚动箭头”之前,这种方法非常有效。此时,我的整个应用程序看起来就像在不断地重绘,到处闪闪发光。
为了查看它是否只是我的应用程序,我编写了一个简单的 winforms 程序来测试它。它所包含的只是一个选项卡控件,带有一个添加选项卡的按钮,其上的表单启用了 WS_EX_COMPOSITED
...果然,当我单击添加按钮并出现滚动箭头时,会发生闪烁.
多行选项卡控件修复了这个问题,但我在应用程序中没有足够的空间来使用它。代码对于我的测试应用程序来说真的很简单......只是添加了一个标签页和一个按钮,然后在表单中做了:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
private void button1_Click(object sender, EventArgs e)
{
this.tabControl1.TabPages.Add("SomeTab");
}
如果重要的话,我正在运行 win7。
最佳答案
看看这个问题的答案 flicker free tab control with WS_EX_COMPOSITED
可能需要一些时间来变通,但应该会有所帮助。
关于c# - WS_EX_COMPOSITED causes entire app to flicker/shimmer when tab control has too many tabs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13867978/