首页 > 其他分享 >讨论TableLayoutPanel加载缓慢和闪烁问题解决方案

讨论TableLayoutPanel加载缓慢和闪烁问题解决方案

时间:2024-08-24 13:28:05浏览次数:11  
标签:ColumnCount 控件 TableLayoutPanel 解决方案 CreateParams tableLayoutPanel2 true 加载

WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受。

在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问题。

1、将DoubleBuffered 设置 true,用双缓存处理Form界面内容加载,可以提高页面显示质量。

1 public MyUserControl
2 {
3 SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
4 
5 this.UpdateStyles();
6 }

2、把构造方法里的内容尽量移动到Form_load事件里处理。

3、把控件绘制的Paint()写到一起绘制。

4、在控件使用后有变化时可以采用先 挂起 再显示的方法,提高显示质量。

 1 this.tableLayoutPanel2.SuspendLayout();
 2  
 3 this.SuspendLayout();
 4  
 5 tableLayoutPanel2.Controls.Clear();
 6   
 7 tableLayoutPanel2.ColumnCount = value.ColumnCount;
 8  
 9 tableLayoutPanel2.ColumnStyles.Clear();
10  
11 for (int i = 0; i < this.tableLayoutPanel2.ColumnCount; i++) { 
12     this.tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F/this.tableLayoutPanel2.ColumnCount));
13 }
14  
15 this.tableLayoutPanel2.RowCount = value.ReservedCount / value.ColumnCount;
16  
17 tableLayoutPanel2.RowStyles.Clear();
18  
19 for (int i = 0; i < tableLayoutPanel2.RowCount; i++) { 
20     this.tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F/tableLayoutPanel2.RowCount));
21  
22 }
23  
24 // 动态添加控件
25  
26 // 在这儿添加你的代码 
27 //...
28  
29  
30 tableLayoutPanel2.ResumeLayout(true);
31  
32 this.ResumeLayout(true);

以上这几种办法,相信大家只要试了,你就会发现并不能解决问题! 

  

真正有效的解决办法:

1、在调用自定义控件的窗体内添加:

1 protected override CreateParams CreateParams 
2 { 
3    get 
4    { 
5             CreateParams cp = base.CreateParams; 
6             cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED 
7             return cp; 
8    } 
9 }

2、在自定义控件中添加:

1 protected override CreateParams CreateParams 
2 { 
3     get 
4     { 
5         var parms = base.CreateParams; 
6         parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN 
7         return parms;
8     } 
9 }

 

本文转载自k_set原创内容点击打开链接

 

标签:ColumnCount,控件,TableLayoutPanel,解决方案,CreateParams,tableLayoutPanel2,true,加载
From: https://www.cnblogs.com/soliang/p/18377664

相关文章

  • 目标检测实践过程中,遇到“No module named ‘torch._six’”报错的一个快速解决方案(无
    很多人在按照网络、书籍教程中的流程尝试自己实现一个基于Faster-RCNN的目标检测模型时,如果调用了PyTorch官方github上的文件时,coco_eval.py文件中会触发报错。1.报错原因PyTorch在2.0之后的版本中移除了_six,导致在coco_eval.py中调用torch._six失败2.解决方案(1)直接根......
  • 解决方案 | VS2022 社区版 获取工具和功能找不到visual stdio安装程序的终极解决办法
      首先这是一种解决方法:https://blog.csdn.net/Wysnbb/article/details/124588395 其次,如果上面方法解决不了,那么可以重新下载vs社区版。(不要误会,并不是下载10G+的东西)https://visualstudio.microsoft.com/zh-hans/vs/community/  下载得到:  安装VisualStud......
  • 商业预付费电能管理解决方案
    安科瑞徐赟杰商业预付费电能管理解决方案大型商业项目的能源消耗量高,一般为住宅的10-15倍,普通公共建筑的3-5倍。作为商业地产的物业管理层,希望他们的用电费用回收越快越好,更进一步的可能需要一个简单便捷的收集、并清楚显示商场内每个商铺的电耗信息的系统。系统建设的意义:......
  • 网络直播平台搭建,瀑布流布局完美解决方案
    网络直播平台搭建,瀑布流布局完美解决方案使用教程直接复制代码列表布局数据自己写<template><viewclass="waterfall-wrap"><viewclass="waterfall-list"><viewclass="left"><hd-list:listData="it......
  • 关于对 Tomcat 进行小版本升级的快速解决方案
    1、背景描述原来的Tomcat在部署时,使用的是最新的版本9.0.40。经过一段时间后,在原来的Tomcat版本中,发现存在漏洞。因此,需要将旧版本(9.0.40)升级到没有漏洞的新版本(9.0.93)。2、查看Tomcat的版本信息如上图所示,在tomcat的bin目录下打开cmd窗口,运行version.bat程序......
  • 游戏不卡顿,vcomp140.dll来助力——《真三国无双8:帝国》缺失文件解决方案
    《真三国无双8:帝国》作为一款大型游戏,其流畅运行依赖于各种系统文件和库文件的完整与正确。当游戏中出现“vcomp140.dll”文件缺失的问题时,确实会导致游戏卡顿甚至无法启动。以下是一些解决《真三国无双8:帝国》中vcomp140.dll文件缺失问题的方案:一、直接下载并替换vcomp140.d......
  • 智慧园区:AI赋能下的创新应用场景探索及多场景解决方案介绍
    随着人工智能(AI)技术的飞速发展,各行各业都在经历着前所未有的变革,智慧园区作为城市智慧化建设的重要组成部分,正逐步成为AI技术应用的热土。智慧园区通过集成物联网、大数据、云计算、人工智能等先进技术,实现了园区管理、运营、服务等多个环节的智能化升级,为入驻企业及管理者带来了......
  • WebRTC支持H.265编码:技术挑战与EasyCVR视频汇聚平台解决方案
    随着互联网技术的快速发展,视频通信已成为人们日常生活和工作中不可或缺的一部分。WebRTC(WebReal-TimeCommunication)作为一种实时通信技术,因其便捷性和高效性而受到广泛关注。然而,在视频编码格式上,WebRTC原生并不支持H.265(也称为HEVC,HighEfficiencyVideoCoding),这在一定程度上......
  • 【openwrt-21.02】openwrt-21.02 T750 switch划分VLAN之后WAN口MAC地址和br-lan相同问
    Openwrt版本NAME="OpenWrt"VERSION="21.02-SNAPSHOT"ID="openwrt"ID_LIKE="ledeopenwrt"PRETTY_NAME="OpenWrt21.02-SNAPSHOT"VERSION_ID="21.02-snapshot"HOME_URL="https://openwrt.org/"BU......
  • dlopen 加载使用了std::thread 的so 导致crash的问题分析
    c++11的的createimplement是在thread.cc中实现的,这意味着创建代码在libstdc++.so中,创建代码需要使用与平台有关的apigcc(g++isapartofgcc)的预期:没有调用的thread的代码,不会产生对pthread的依赖,更重要的,不同配置的gcc的线程模型是不同的,依赖库也不同(即不一定是pthrea......