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

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

 

本文链接:WinForm 加载自定义控件闪烁问题,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量