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

2024-03-12

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


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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果图像是背景,TabControl 会闪烁 的相关文章

  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 在 UserControl 中使用 BindingSource

    我有一个包含多个字段的 UserControl 我希望将其绑定到 BindingSource 我还希望 UserControl 公开一些 BindingSource 属性 以便可以将其放在表单上并绑定到表单上的 BindingSource
  • 如何在特定时间以毫秒精度触发 C# 函数?

    我有两台计算机 它们的时间通过 NTP 同步 确保时间仅相差几毫秒 其中一台计算机将通过 TCP 向另一台计算机发送一条消息 以在两台计算机上的未来指定时间启动某个 c 函数 我的问题是 如何在特定时间以毫秒精度 或更好 触发 C 中的函数
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • 如何在winform应用程序中生成产品收据?

    我第一次开发 winform 应用程序 我有一个 gridview 其中包含用户已购买的产品列表 我点击了一个 打印 按钮 允许用户生成如下收据 所以在这里我很困惑是否应该使用 winform默认RDLC或Crystal Report 或者
  • 使用文本和进度条填充 DataGridView

    我正在创建一个多线程应用程序 其中每个线程将在我的应用程序中显示为一行DataGridView 我想要一个ProgressBar每行指示相应的线程进度 问题是 这可能吗 如果是这样 怎么办 我添加了类 DataGridView Progre
  • DataGridView 行:半透明选择或选择上的行边框

    我有一个 DataGridView 其中每行的背景根据数据绑定项而不同 但是 当我选择一行时 我无法再看到它原来的背景颜色 为了解决这个问题 我想到了两个解决方案 我可以使选择半透明 从而可以查看两个选定的行是否具有不同的背景颜色 或者 我
  • 根据值从绿色到红色[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个在 vb net 中返回从红色 值 0 到绿色 值 100 的颜色的函数 另外 我需要一种方法来确定字体的颜色应该是白色还是
  • 如何清除组合框?

    我有一些组合框设置为下拉列表 用户可以在其中选择一个数字 我还有一个清除按钮 应该清除组合框中的文本 但我似乎无法得到它 我试过了 doesn t work cboxHour Text and doesn t work cboxHour R
  • C# Winform 表单中的表单

    我想打开一个表单的多个实例并将其显示在另一种表单或另一种表单的面板中 怎么做 如果您不使用 MDI 您仍然可以将一个窗体添加到另一个窗体或窗体上的面板 public Form1 InitializeComponent Form2 embed
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • 如何在 C# 中最小化单个 Windows 应用程序表单

    我有两个表格 Form1 和 Form2 我目前在启动表单 Form1 中有一个加载 Form2 的按钮 我想要做的是让 Form1 最小化 并且仅在被告知加载时才显示 Form2 以便在显示 Form 2 时 Form1 不会在后台 到目
  • XNA - 在表单中嵌入 DirectX 控件?

    我想将 DirectX 好吧 XNA 的东西渲染到 system windows forms 控件而不是整个窗口 这样我就可以将它与按钮和东西配对 这可能吗 我会使用哪个控件 我该怎么做呢 我已经搜索了文档 但我不知道应该使用哪些术语 是的
  • 使用 C# 在 Windows 窗体应用程序中正确使用 OnClick 与 MouseClick 事件

    我目前正在开发一个自定义控件 并意识到我的代码正在运行两次 这实际上并不是一个大问题 它只是 Focus 方法调用 不过 我想了解一下 从阅读点击 MSDN说明单击事件 http msdn microsoft com en us libra
  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • 如何使用 .net 2.0 中的 WebBrowser 控件检查 ajax 更新?

    我有一个网页正在使用 WebBrowser 控件在 winform 应用程序中显示 我需要在网页中的 HTML 发生变化时执行一个事件 但是 我找不到通过 Ajax 更新页面时触发的事件 DocumentComplete FileDownl
  • 如何禁用 WebBrowser 控件中的点击声音

    我使用 Javascript 单击网络浏览器控件中的链接 但我不想听到IE的 咔哒 声 有什么办法可以做到这一点吗 P S 我不想更改系统设置 我见过这个 如何仅在您的应用程序中禁用网络浏览器 点击声音 https stackoverflo
  • 从 RichTextBox 复制文本及其格式

    如何将 RichTextBox 中的文本及其格式复制到写字板或网络浏览器 就像复制纯文本一样 您可以使用Clipboard SetText method http msdn microsoft com en us library 6eahs
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud

随机推荐