当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

C# tableLayoutPanel动态加载控件闪烁的解决方案

Jorge2年前 (2022-05-08)C#/.net框架857

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

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

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

C#
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);this.UpdateStyles();

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

3.把控件绘制的Pint()写到一起绘制。

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

C#
this.tableLayoutPanel2.SuspendLayout();
                this.SuspendLayout();
                tableLayoutPanel2.Controls.Clear();
                
                tableLayoutPanel2.ColumnCount = value.ColumnCount;
                tableLayoutPanel2.ColumnStyles.Clear();
                for (int i = 0; i < this.tableLayoutPanel2.ColumnCount; i++) {
                    this.tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F/this.tableLayoutPanel2.ColumnCount));
                }
 
                this.tableLayoutPanel2.RowCount = value.ReservedCount / value.ColumnCount;
                tableLayoutPanel2.RowStyles.Clear();
                for (int i = 0; i < tableLayoutPanel2.RowCount; i++) {
                    this.tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F/tableLayoutPanel2.RowCount));
                }
 
                //  动态添加控件    
                //  在这儿添加你的代码
                ...
 
 
                tableLayoutPanel2.ResumeLayout(true);
                this.ResumeLayout(true);

你只有试了你就会发现,以上这几种办法并不能解决问题。 

  

  解决办法:

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

C#
protected override CreateParams CreateParams{    get    {
            CreateParams cp = base.CreateParams; 
            cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED 
            return cp;     }}

在自定义控件中添加的:

C#
protected override CreateParams CreateParams{
       get
      {
              var parms = base.CreateParams; 
              parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN 
              return parms;
       }}

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

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=44

标签: .NET.NET框架
分享给朋友:

“C# tableLayoutPanel动态加载控件闪烁的解决方案” 的相关文章

windows下c#程序提高实时性

windows下c#程序提高实时性

引言:我们手里的运控软件对实时性有了新要求。因为同设备上运行的其它视觉软件对cpu时间有变态的占用,压缩了运控软件的cpu占用时间。我们知道如果视觉软件卡一下,最多是处理时间长一点,但是运控软件卡一下,那就意味着撞机的问题,这个要严重得多。这个问题会持续把研究结果更新到本贴子。(一)提升线程和进程的...

C# 控件闪烁问题的解决

C# 控件闪烁问题的解决

说一下解决C#下控件闪烁的几个问题,如下:  listview和datagridview显示数据闪烁 自定义控件的显示闪烁listbox滚动条拖动闪烁面板中控件过多的闪烁propertyGrid点击和修改项目缓慢的问题richtextbox控件的刷新显示问题此类问题对于界面复杂规...

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件是很强。可以实现类似Vitual Studio属性面板那样的效果。但是。。。。我们一直痛苦它在选择和修改项目的时候很慢。我的用法是使用控件的SelectObject来绑定数据。C# PgridMotionSpeed.SelectedObject ...

C# Modelbus crc16计算校验和程序

C# Modelbus crc16计算校验和程序

我们手里一个无刷电机,采用485的modelbus crc16协议来控制。因此需要一个计算校验和的工具。源码:C#using System;using System.Collections.Generic;using System.ComponentModel;usin...

谈谈ObservableCollection观察者集合

谈谈ObservableCollection观察者集合

注:事件很常见,但有重复的代码量。如果你想简化一下事件的编程,而且是整个程序只使用一个像事件池一样的东西,可以尝试使用下文讲的ObservableCollection观察者集合来做到。ObservableCollection<T>类表示一个动态数据集合,在添加项,移除项或刷新整个列表时,...

C#测量程序运行时间及cpu使用时间

C#测量程序运行时间及cpu使用时间

对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。附例如下:C#private void ShowRunTime() {...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。