zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [数学]如何旋转曲线
    19_04_25校内训练[最小割]
    第二类斯特林数总结
    19_04_19校内训练[Game]
    kd-tree题目总结
    [HNOI2019]校园旅行
    LCT模板(无讲解)
    min_25筛题目总结
    Miller Robbin测试模板(无讲解)
    19_04_02校内训练[图染色]
  • 原文地址:https://www.cnblogs.com/kest/p/4683012.html
Copyright © 2011-2022 走看看