美文网首页
解决 C# Winform 窗体打开时闪烁问题

解决 C# Winform 窗体打开时闪烁问题

作者: 三娃头很铁 | 来源:发表于2018-05-14 23:50 被阅读0次

这个问题属于必须解决的问题,而且界面的控件越多,闪烁也越多,试过多种解决办法效果都不理想。

解决办法:把此段代码加入到窗体代码中

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

主要原因是对于Winform来说,一个窗体中绘制多个控件是很花时间的。特别是默认的按钮控件。Form先画出背景,然后留下控件需要的“洞”。如果控件的背景是透明的,那么这些“洞”就会先以白色或黑色出现,然后每个控件的“洞”再被填充,就是我们所看到的闪烁,在WinForm中没有现成的解决方案。设置控件双缓冲并不能解决它,因为它只适用于自己,而不是复合控件集。

而原文作者发现了一种新的Windows样式,可用于WindowsXP和Vista。只要你设置该样式,WindowsXP对窗体及其所有子控件进行双重缓冲。

而我测试结果是 Win7 / Win10 一样奏效

原理原文
A form that has a lot of controls takes a long time to paint. Especially the Button control in its default style is expensive. Once you get over 50 controls, it starts getting noticeable. The Form class paints its background first and leaves "holes" where the controls need to go. Those holes are usually white, black when you use the Opacity or TransparencyKey property. Then each control gets painted, filling in the holes. The visual effect is ugly and there's no ready solution for it in Windows Forms. Double-buffering can't solve it as it only works for a single control, not a composite set of controls.
I discovered a new Windows style in the SDK header files, available for Windows XP and (presumably) Vista: WS_EX_COMPOSITED. With that style turned on for your form, Windows XP does double-buffering on the form and all its child controls.

相关文章

  • 解决 C# Winform 窗体打开时闪烁问题

    这个问题属于必须解决的问题,而且界面的控件越多,闪烁也越多,试过多种解决办法效果都不理想。 解决办法:把此段代码加...

  • 2019-03-26居中

    C# winform解决解决窗体第一次设置为最大化后,点击最大化按钮窗体无法居中问题...

  • 解决 C# Winform Button 按了Tab后 会出现黑

    C# Winform Button按钮问题 C# Winform的 Button,大部分会选择 flat 样式,但...

  • C# winform 等待窗体

    为提升用户体验,改造了一下原作者的东西 (样式没变,抽取了有用的代码)改造前: 改造后 : 代码也挺简单的 调...

  • WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作。不过会有一个问题:...

  • Winform应用程序Image OOM异常时的处理方法

    在做Winform应用程序处理Image时碰到了这样一个问题。窗体设计如下: 当点击上面窗体中的上一张和下一张时,...

  • 11-6学习总结

    今天学习了c#第7章: 1:非模式窗体 非模式对话框 窗体打开时,将始终显示在当前应用程序窗体的最上层,此时,既可...

  • Winform

    C# WinForm实践开发教程 C# WinForm实践开发教程——第一章 Windows编程基础C# WinF...

  • winform开发闪烁问题-解决方案

    前言: winform开发windows桌面程序,经常会遇到控件闪烁的问题。总结在开发中遇到控件闪烁的几种情况...

  • 解决winform 窗体设计器异常的问题

    如上图 大家肯定都遇到过这样的棘手的问题。一般情况都是自己代码问题,有时解决了代码bug,项目运行无错但设计器还不...

网友评论

      本文标题:解决 C# Winform 窗体打开时闪烁问题

      本文链接:https://www.haomeiwen.com/subject/delfdftx.html