WinForm 加载自定义控件闪烁问题

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

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

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

SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);

this.UpdateStyles();

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

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

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

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

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

  

  

  解决办法:

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

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 }

在自定义控件中添加的:

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

装模作样的声明一下:本博文章若非特殊注明皆为原创,若需转载请保留原文链接(http://www.cnblogs.com/kest/p/4683012.html)及作者信息k_est

时间: 2024-10-11 06:43:12

WinForm 加载自定义控件闪烁问题的相关文章

【转】C# winform 加载网页 模拟键盘输入自动接入访问网络

[转]C# winform 加载网页 模拟键盘输入自动接入访问网络 声明: 本文原创,首发于博客园 http://www.cnblogs.com/EasyInvoice/p/6070563.html 转载请注明出处. 背景: 由于所在办公室网络限制,笔者每天都使用网络都要先连接无线网.如下图,输入授权用户信息登录后才能使用WIFI. 丧心病狂的是该网页Cookie 过期时间为24小时,所以每天重复以下动作:打开浏览器 -> 手动输入 工号密码.密码 -> 点击"登录"按钮.

winform 加载窗体时弹出另一个窗体并显示进度条的源码

winform 加载窗体时弹出另一个窗体并显示进度条的源码 //frmA: 源窗体 //------------------------------------------ //引用 using System.Threading; BackgroundWorker worker; public frmA() { InitializeComponent(); worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandl

vue -- v-cloak解决刷新或者加载出现闪烁(显示变量)

在使用vue绑定数据的时候,渲染页面时会出现变量闪烁,例如 <div class="#app"> <p>{{value.name}}</p> </div> 在加载的时候会看到 {{value.name}} 在页面出现,过了几秒之后才会渲染数据,在vue中有个指令可以解决这个问题,v-cloak v-cloak要放在什么位置呢,是不是每个需要渲染数据的标签都要添加这个指令,经过我的试验发现,v-cloak并不需要添加到每个标签,只要在el挂

c# WinForm加载焦点

1.c# WinForm在加载时把焦点设在按钮上 this.AcceptButton = button1; 这样在WinForm窗口中, 按钮的状态会变成窗口的默认按钮, 只要按下Enter键,就会触发按钮的单击事件 这种效果与按钮获得焦点类似. 当然,加个button1.Focus();更好. 2.c# WinForm在加载时把焦点设在textBox上 两种方法: 1 在Load中设置 this.ActiveControl = this.textBox; 2 this.textBox.Focu

WinForm 加载本地图片

方式一: /// <summary> /// 从程序集中加载图片 /// </summary> /// <param name="imagePathName">图片路径(该图片必须是嵌入的资源)</param> /// <returns>Bitmap 格式图片</returns> public Bitmap GetIcon(string imagePathName) { Bitmap b = null; try {

C# Winform 加载窗体/对象时的等待页面设计

在设计应用程序过程中,有时候加载对象需时较长,我们可以显示一个Loading等待页面,对用户来说就比较友好了. 这个还是涉及到多线程,下面是步骤. 一.创建好Loading窗体: 一个Panel用于显示转圈动画(仿Win10的Loading),一个Loading文本标签.动画的代码来自网络. public partial class Fm20Loading : Form { public Fm20Loading() { InitializeComponent(); //LblMessage.Te

winform加载顺序

1 Form_Initialize 2 Form_Load 3 Form_Resize 4 Form_Activate 5 Form_Paint 6 Form_QueryUnload7 Form_Unload 8 Form_Terminate

ExtJS4.2 仅需配置URL动态加载GridPanel列(带分页)

最近做ExtJS一直想做个傻瓜式的GridPanel,今天折腾了一天,从GitHub找到的老外写的解决方案, 在他的基础上做了一些改动,增加了分页,增加了columns手动配置(原本只能动态生成),大家有兴趣可以自由扩展,我做了很详细的注释 效果图如下,仅需在html页面引入ext.all,并创建自定义控件,配置url即可创建带分页效果的GirdPanel 代码: 效果图: 一.动态加载自定义控件 自定义脚本包括两部分:DynamicGrid.js和DynamicReader.js 将Ext目录

WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要有三种实现方式: 简单忙碌状态控件BusyBox: Win8/win10效果忙碌状态控件ProgressRing: 弹出异步等待框WaitingBox: 二.简单忙碌状态控件BusyBox 效果图: 通过属性"IsActive"控制控件是否启用,后台C#代码: /// <summary> /