C# WinForm页面切换导致闪烁的解决方法(转)
问题描述
界面上放置大量的控件(尤其是自定义控件)会导致在窗体加载时,速度变得缓慢;当切换页面时,也会时常产生闪烁的问题,非常影响用户体验。
解决方法
将此代码写在要解决闪烁问题的父窗体中:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
原理
Winform窗体程序在启动时绘制大量控件的时间开销非常大, 两个原因导致了这种闪烁(flicker):
- 当一个控件需要绘制时,Windows会向此窗体发送两条消息,第一条是:WM_ERASEBKGND,这条消息使得背景得以绘制,第二条消息是:WM_PAINT,使得前景被绘制,首先背景色是简单的,所以速度较快,前景色较为耗时(相对),所以就产生了这种闪烁现象,这是问题的根源,Winform为此提供了一个解决方案:双缓冲(OptimizedDoubleBuffer)。
当一个窗体包含许多控件的时候,需要大量的时间来进行绘制,尤其是默认属性的按钮控件。一旦你的窗体包含了50个(或更多)的控件,闪烁的问题就出现了。窗体类首先绘制背景色,打个比方,每个控件的背景色都形容为一个“坑”,那么当你使用透明色或者继承父类选项时,每个洞首先被绘制成白色,黑色,然后每个控件前景色被绘制(填坑),表面上看非常丑,并且没有现成的解决方案,DoubleBuffering也无法解决大量的控件闪烁问题。
在SDK头文件中有这样一个Windows样式:WS_EX_COMPOSITED,这个样式可使Windows Forms启用双缓冲于所有窗体以及其子控件,当然也就解决了上述问题。
C# WinForm页面切换导致闪烁的解决方法(转)的更多相关文章
- C# WinForm页面切换导致闪烁的解决方法
问题描述 界面上放置大量的控件(尤其是自定义控件)会导致在窗体加载时,速度变得缓慢:当切换页面时,也会时常产生闪烁的问题,非常影响用户体验. 解决方法 将此代码写在要解决闪烁问题的父窗体中: prot ...
- php 页面调转导致session丢失解决方法
例如在a页面设置了会话,然后打印会话值,可以成功打印,但是调转到b页面后,会话丢失了. 原因有不少,一个原因就是没有在页面开头加入session_start();当然你也可以直接配置php.ini文件 ...
- 【Jquery Mobile教程】【问题】- 在页面切换时会闪烁
用jQuery mobile开发移动应用和web应用的时候,页面切换会闪烁. 感觉,造成这样的原因大概是jQuery mobile在移动浏览器下的性能不佳造成的.jQuery mobile页面切换可以 ...
- Jquery方法load之后导致js失效解决方法
Jquery方法load之后导致js失效解决方法 >>>>>>>>>>>>>>>>>>> ...
- AppStore下载失败使用已购页面再试一次解决方法
AppStore载失败 使用已购页面再试一次解决方法 工具/原料 Mac OS 方法/步骤 1.大家可以先试试更改系统 DNS 的方法,由于苹果的 App Store 应用商店在国外,所以 DNS 如 ...
- XCode编译文件过多导致内存吃紧解决方法
XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧
- 多线程访问winform控件出现异常的解决方法
一. 多线程访问winform控件出现异常的解决方法 1. 问题描述<1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationExcept ...
- vue2.0 页面A跳转到页面B,B页面停留在A页面的滚动位置的解决方法
如果页面A沿Y轴滚动一段距离,然后跳转到页面B: 在进入B页面时,B页面已经滚到页面A的距离,返回页面A,发现A还在之前的滚动位置: 这样体验就很不好,所以我们要进行一些处理: 我的方法是:在路由守卫 ...
- 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 ...
随机推荐
- ubuntu14.04 改变系统默认Python解释器
今天刚安装了anaconda,摸索了一阵子,现做个相关记录. 虽然安装的时候,会通知你是否加入环境变量(加到.bashrc尾部),但是调用的解释器仍然是系统自带默认的Python2.7.6,我们在/r ...
- 通过一道面试题了解Condition线程通信
Condition Condition接口描述了可能会与锁有关联的条件变量.这些变量在用法与使用Object.wait访问的隐式监视器类似,但提供了更强大的功能.需要特别指出的是,单个Lock可能与多 ...
- WebApplication和WebSite的简单区别
初步认识网站和网站应用程序区别 1. 网页头部文件 网站 <%@ Page Language="VB" AutoEventWireup="false" C ...
- LeetCode OJ:Min Stack(最小栈问题)
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...
- php5.4.0以后加入trait实现代码复用【摘录】
在http://www.php.net/manual/zh/language.oop5.traits.php 查看了一下5.4.0提供的特性trait顺便做一个标记(总结): 首先要明确trait和类 ...
- ubuntu下编译neovim
# 安装编译依赖 sudo apt-get install libtool libtool-bin autoconf automake cmake g++ pkg-config unzip -y # ...
- Xcode 8 插件安装
1.删除旧插件 cd ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-in rm -rf ../Plug-ins 2.Xcode重 ...
- Linux:uniq命令详解
uniq uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用. 语法 uniq(选项)(参数) 选项 -c或——count:在每列旁边显示该行重复出现的次数: -d或--repeat ...
- python marshal 对象序列化和反序列化
有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上.Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle ...
- (转)使用Hive UDF和GeoIP库为Hive加入IP识别功能
Hive是基于Hadoop的数据管理系统,作为分析人员的即时分析工具和ETL等工作的执行引擎,对于如今的大数据管理与分析.处理有着非常大的 意义.GeoIP是一套IP映射数据库,它定时更新,并且提供了 ...