问题描述

界面上放置大量的控件(尤其是自定义控件)会导致在窗体加载时,速度变得缓慢;当切换页面时,也会时常产生闪烁的问题,非常影响用户体验。


解决方法

将此代码写在要解决闪烁问题的父窗体中:

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

原理

Winform窗体程序在启动时绘制大量控件的时间开销非常大, 两个原因导致了这种闪烁(flicker):

  1. 当一个控件需要绘制时,Windows会向此窗体发送两条消息,第一条是:WM_ERASEBKGND,这条消息使得背景得以绘制,第二条消息是:WM_PAINT,使得前景被绘制,首先背景色是简单的,所以速度较快,前景色较为耗时(相对),所以就产生了这种闪烁现象,这是问题的根源,Winform为此提供了一个解决方案:双缓冲(OptimizedDoubleBuffer)。
  2. 当一个窗体包含许多控件的时候,需要大量的时间来进行绘制,尤其是默认属性的按钮控件。一旦你的窗体包含了50个(或更多)的控件,闪烁的问题就出现了。窗体类首先绘制背景色,打个比方,每个控件的背景色都形容为一个“坑”,那么当你使用透明色或者继承父类选项时,每个洞首先被绘制成白色,黑色,然后每个控件前景色被绘制(填坑),表面上看非常丑,并且没有现成的解决方案,DoubleBuffering也无法解决大量的控件闪烁问题。

    在SDK头文件中有这样一个Windows样式:WS_EX_COMPOSITED,这个样式可使Windows Forms启用双缓冲于所有窗体以及其子控件,当然也就解决了上述问题。

C# WinForm页面切换导致闪烁的解决方法(转)的更多相关文章

  1. C# WinForm页面切换导致闪烁的解决方法

    问题描述 界面上放置大量的控件(尤其是自定义控件)会导致在窗体加载时,速度变得缓慢:当切换页面时,也会时常产生闪烁的问题,非常影响用户体验. 解决方法 将此代码写在要解决闪烁问题的父窗体中: prot ...

  2. php 页面调转导致session丢失解决方法

    例如在a页面设置了会话,然后打印会话值,可以成功打印,但是调转到b页面后,会话丢失了. 原因有不少,一个原因就是没有在页面开头加入session_start();当然你也可以直接配置php.ini文件 ...

  3. 【Jquery Mobile教程】【问题】- 在页面切换时会闪烁

    用jQuery mobile开发移动应用和web应用的时候,页面切换会闪烁. 感觉,造成这样的原因大概是jQuery mobile在移动浏览器下的性能不佳造成的.jQuery mobile页面切换可以 ...

  4. Jquery方法load之后导致js失效解决方法

    Jquery方法load之后导致js失效解决方法 >>>>>>>>>>>>>>>>>>> ...

  5. AppStore下载失败使用已购页面再试一次解决方法

    AppStore载失败 使用已购页面再试一次解决方法 工具/原料 Mac OS 方法/步骤 1.大家可以先试试更改系统 DNS 的方法,由于苹果的 App Store 应用商店在国外,所以 DNS 如 ...

  6. XCode编译文件过多导致内存吃紧解决方法

    XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧

  7. 多线程访问winform控件出现异常的解决方法

    一.  多线程访问winform控件出现异常的解决方法 1.  问题描述<1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationExcept ...

  8. vue2.0 页面A跳转到页面B,B页面停留在A页面的滚动位置的解决方法

    如果页面A沿Y轴滚动一段距离,然后跳转到页面B: 在进入B页面时,B页面已经滚到页面A的距离,返回页面A,发现A还在之前的滚动位置: 这样体验就很不好,所以我们要进行一些处理: 我的方法是:在路由守卫 ...

  9. yum安装命令:遇到的问题报错如下: File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 通过看报错可以了解到是使用了python2的语法,所以了解到当前yum使用的Python2,因为我单独安装了python3,且python3设置为默认版本了,所以导致语法问题 解决方法: 使用python2.6 yum install

    1.安装zip yum install -y unzip zip 2.安装lrszs yum -y install lrzsz 3.安装scp 遇到下面的问题: 结果提示: No package sc ...

随机推荐

  1. Linux 策略路由配置

    策略路由配置 #编辑rt_tables echo "192 net_192 " >> /etc/iproute2/rt_tables echo "196 ne ...

  2. 验证email是否合法

    https://buluo.qq.com/p/detail.html?bid=339910&pid=6675390-1514450689&from=grp_sub_obj 场景1:验证 ...

  3. Qt中使用ActiveX控件

    (转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了Activ ...

  4. Java进阶4表达式中的陷阱

    Java进阶4表达式中的陷阱 20131103 表达式是Java中最基本的组成单元,各种表达式是Java程序员最司空见惯的内容,Java中的表达式并不是十分的复杂,但是也有一些陷阱.例如当程序中使用算 ...

  5. 【51nod-1091】线段的重叠(贪心)

    所有线段按起点从小到大排序,然后比较出最大的重叠部分.比如第i条线段和第j条线段进行比较找出重叠部分(j>i),当第j条线段的右端点<第i条线段的右端点,此时可以让i继续比较后面的线段:如 ...

  6. 208.11 RF test

    1) filter (not related); 2) Crystal (in progress); 3) IC;  4) Antenna. (not related) The three most ...

  7. 一个浮动 css3效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. document和javaScript内置对象

    1.Document 属性: referrer //返回载入当前文档的URL URL //返回当前文档的URL 方法: getElementById(); //根据id获取html元素对象 getEl ...

  9. ss-libev 源码解析local篇(5):ss-local之remote_send_cb

    remote_send_cb这个回调函数的工作是将从客户端收取来的数据转发给ss-server.在之前阅读server_recv_cb代码时可以看到,在STAGE_STREAM阶段有几种可能都会开启r ...

  10. Modules(最小树形图)

    题目链接: Modules 描述 蒜头有一块主板,为了提升其性能,可在主板上安置若干增强模块.蒜头有n个不同的增强模块,增强模块可以直接安置在主板上,也可以安置在已经直接或间接连接在主板上的其他增强模 ...