winforms - 如果图像是背景,TabControl 会闪烁

标签 winforms tabcontrol

我注意到,如果我在具有图像背景的面板中有一个 TabControl,当鼠标悬停在一个选项卡上时,它会闪烁并重绘。是否有解决方法来防止这种情况发生?

最佳答案

我看到了。发生这种情况是因为 TabControl 部分通过要求父控件在其自己的窗口内绘制自身来绘制自身。这是必要的,因为选项卡没有覆盖控件的整个宽度,它们“伸出”。如果 BackgroundImage 的绘制速度很慢,您会看到正在绘制的背景和在其上绘制的选项卡之间闪烁。

这将很难解决,TabControl 不支持任何类型的双缓冲。您只能通过使 BackgroundImage 有效地绘制来最小化效果。为此,您需要使图像的大小与面板的 ClientSize 完全相同,这样就不必调整图像的大小。并使用 PixelFormat32bppPArgb 像素格式创建该位图,它通常比其他格式快 10 倍。

有一种 Elixir ,窗口有一个样式标志,可以为整个窗口(包括其子控件)启用双缓冲。自 XP 以来受支持,但报告了一些副作用。将此代码粘贴到您的表单中,它修复了 TabControl 闪烁:

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

但请注意,TabControl 的视觉样式渲染器与此样式标志有一个相当大的不兼容。如果您的选项卡溢出并且您看到选择箭头,那么它会变得很糟糕并开始一遍又一遍地渲染选项卡,从而产生非常高的闪烁率。

关于winforms - 如果图像是背景,TabControl 会闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3111841/

相关文章:

c# - 使用 DataGridViewComboBoxColumn 在 DataGridView 中显示所选图像?

c# - 如何在 ContextMenuStrip 中对齐分隔符

C# .Net 3.5 解压缩 zip 文件没有第 3 方

wpf - 在选项卡控件中处理多个数据网格以便单元格在选项卡更改时离开编辑模式的正确方法是什么?

c# - 在新 TAB 中打开链接(WebBrowser 控件)

c# - 程序关闭使 StreamWriter 困惑

C++ API DLL 项目

c# - 无法从 DoubleClick 事件切换 TabItem

c# - 检查控件是否为 TabControl 中的文本框

c# - 以编程方式更改选项卡顺序