通过特殊处理 Resize 事件解决 WinForm 加载时闪烁问题的一个方法
WinForm 上放置的控件多了或者有大背景图,窗体加载时就会闪烁,对于一般的闪烁,设置 DoubleBuffer=True或许有一点改善,要立竿见影的解决可以重载 CreateParams 使用 WS_CLIPCHILDREN 参数初始化窗体,相关的文章网上多不胜数,这里也就不再赘述。
WS_CLIPCHILDREN 方法虽好,但是就其原理,不是哪里都能拿来用的。比如需要子窗体刷新的场景下,如绘图或者实时视频显示的时候上了这一剂猛药,就玩不下去了,需要改换其他的办法。
最近在MDI子窗体上加载 SplitContainer 控件,然后在控件的 Panel里面加载多个自定义的VideoPlayer控件就遇到了Form Load 时窗体闪烁严重的问题。
通过 Debug.Print 在窗体加载过程中的所有事件中输出日志,很快发现是MDI子窗体加载,最大化,激活等等触发了很多次 Resize,每次 Resize 都会导致窗体重绘,于是对症下药,针对这种情况,增加一个计数器,先将作为容器的 SplitContainer 控件 Hide 起来,等到Resize 够了再把它 Show 出来。前后对比,闪烁问题改善明显。
Public Sub New()
' 此调用是设计器所必需的。
InitializeComponent()
' 在 InitializeComponent() 调用之后添加任何初始化。
SplitContainer1.Hide()
End Sub Private _iResized As Int32
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e) _iResized +=
Debug.Print("============================ OnResize {0} ({1}) ============================",
_iResized, Me.Size) If _iResized = AndAlso SplitContainer1.Visible = False Then
'5 是统计得出的窗体加载过程中最后一次 Resize
Application.DoEvents()
SplitContainer1.Show()
End If
End Sub
这个办法一点都不高大上,希望能帮到不能使用 WS_CLIPCHILDREN 解决闪烁问题的人。
通过特殊处理 Resize 事件解决 WinForm 加载时闪烁问题的一个方法的更多相关文章
- 解决HTML加载时,外部js文件引用较多,影响页面打开速度问题
		解决HTML加载时,外部js文件引用较多,影响页面打开速度问题 通常HTML文件在浏览器中加载时,浏览器都会按照<script>元素在页面中出现的先后顺序,对它们依次加载,一旦加载的j ... 
- WinForm 加载自定义控件闪烁问题
		WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受. 在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问 ... 
- vue img标签图片加载时 闪烁
		//jsdata(){ return{ img_url: '', } },created(){ //请求数据,并给图片赋值url ajax.get(http_url) .then(res=>{ ... 
- android报错及解决1--Bitmap加载时,报bitmap size exceeds VM budget
		报错描述: 用Bitmap加载图片资源时,报错java.lang.OutOfMemoryError: bitmap size exceeds VM budget 原因分析: android系统限制,只 ... 
- 页面加载完后自动执行一个方法的js代码
		1.在body中用onload: <body onload="conver()"> 2.在脚本中用window.onload: <script type=&quo ... 
- linux环境,hidraw设备自动加载时默认权限的设置方法
		在linux系统中,hidraw设备会自动加载并设置默认权限,但系统的默认只允许root用户访问,普通用户是不允许读写. 设置的方法是修改udev的配置,配置路径是/etc/udev/rules.d/ ... 
- 【转】C# winform 加载网页 模拟键盘输入自动接入访问网络
		[转]C# winform 加载网页 模拟键盘输入自动接入访问网络 声明: 本文原创,首发于博客园 http://www.cnblogs.com/EasyInvoice/p/6070563.html ... 
- 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法
		百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ... 
- c# WinForm加载焦点
		1.c# WinForm在加载时把焦点设在按钮上 this.AcceptButton = button1; 这样在WinForm窗口中, 按钮的状态会变成窗口的默认按钮, 只要按下Enter键,就会触 ... 
随机推荐
- 留学Essay写作做到精准表达很关键
			很多留学生在essay写作中可以迅速想到合理的中文论点.可是,写出来的英文论点却漏洞百出,不忍直视.在essay写作中我们要如何精准地用英文写出自己内心的独白呢?除了咨询老师,靠自己一样能做到! 1引 ... 
- core_cm4.h(129): error:  #35: #error directive: "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
			今天使用 systick 的时候,只使用了头文件 core_cm4.h,结果就报错了,原因是 __FPU_PRESENT 没有定义,这个定义其实在 stm32f4xx.h 里面.所以如果要解决这个错误 ... 
- HZNU-ACM寒假集训Day4小结  最短路
			最短路 1.Floy 复杂度O(N3) 适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #in ... 
- 美素数(HDU 4548)(打表,简化时间复杂度)
			相信大家都喜欢美的东西,让我们一起来看看美素数吧. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为"美素数",如29,本身是素数,而且2+9 = 11 ... 
- 自定义alert
			参考:https://www.cnblogs.com/st-leslie/articles/5279864.html 把window.alert=function(){}指向新的方法,即相当于重写 w ... 
- h5-transform二维变换-盾牌还原案例
			就是8张盾牌的拼图 1 <div class="transforms"> <img src="../img/dp1.png" alt=&quo ... 
- wordcloud安装错误信息的解决
			参考链接:https://www.zhihu.com/people/si-kong-ji-54/posts 在windows下command里运行指令 pip install wordcloud ... 
- day68-CSS-float浮动,clear清除浮动,overflow溢出
			1. float 浮动 1.1 在 CSS 中,任何元素都可以浮动. 1.2 浮动元素会生成一个块级框,而不论它本身是何种元素.内联标签设置浮动,就变成了块级标签. 1.3 关于浮动的两个特点: 浮动 ... 
- alert(1&&2)的输出问题
			此文章转载自http://blog.csdn.net/xiaotao_css/article/details/61940664 一.先来说说 ||(逻辑或),从字面上来说,只有前后都是false的时候 ... 
- 将微服务注册到Euraka
			1.添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId> ... 
