通过特殊处理 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键,就会触 ...
随机推荐
- MAT工具在MacBook的安装
当Java应用出现内存溢出的问题的时候,需要拿工具分析dump文件的.JDK自带的jvisualvm和jhat都可以使用,另外还有一个工具是 Memory Analyzer Tool ,支持独立运行和 ...
- JDBC批处理方法
每次新建Connection的时候相当于建了一座桥,每次一辆车(PreparedStatement)运送货物(ResultSet)成本太高! 每次都建立网络连接的时间远远大于本地的时间,为了处理大量的 ...
- Swift—UITextField的基本用法
https://www.jianshu.com/p/63bdeca39ddf 1.文本输入框的创建##### let textField = UITextField(frame: CGRect(x:1 ...
- 用Maven整合SSM项目实例
转自https://www.cnblogs.com/hujianblogs/p/8526737.html 本人在学习Maven之余,为了深入了解Maven的用法,决定创建一个SSM整合实例.项目是自 ...
- centos系统 通过命名查找需要安装哪个安装包 command not found
场景: 服务器未安装命令,但是我们需要使用,不知道该安装什么包,以sz命令为例 [root@localhost linshi]# sz tes.sh -bash: /usr/bin/sz: 没有那个文 ...
- CCCC 红色警报
题意: 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个 ...
- 洛谷 P1964 【mc生存】卖东西(多重背包)
题目传送门 解题思路: 题目里有,多重背包. AC代码: #include<iostream> #include<cstdio> #include<map> usi ...
- Arduino串口的一些高级用法
1.配置串口通信数据位.校验位.停止位通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率.而使用Serial.begin(speed, config) ...
- Maven:Failure executing javac, but could not parse the error:javac: 无效的目标发行版: 1.8
eclipse中对着项目maven——>>maven install时出现错误:Failure executing javac, but could not parse the error ...
- try,catch,finally尝试(一个程序块多个catch)
曾学过c++,但是对这些异常捕捉不是很了解,通过别的编程语言了解 public class newclass { public static void main(String[] args) { tr ...