zoukankan      html  css  js  c++  java
  • DataGridView控件在加载数据时产生的闪烁问题

    通过实现双缓冲解决窗体、控件尺寸大小发生变化,以及DataGridView控件在加载数据时产生的闪烁问题
     
     
    1、设置窗体和控件的双缓冲
     
    方法一:使用窗体或控件的DoubleBuffered属性
    this.DoubleBuffered = true;
     
    方法二:
    //将指定的标志设置为true或false
    this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
    //强制将分配的样式重新应用到控件
    this.UpdateStyles();
     
    -----------------------------------------------------------------------------------
    this.SetStyle(ControlStyles.UserPaint, true);//控件自行重绘
    this.SetStyle(ControlStyles.ResizeRedraw, true);//调整大小时重绘
    this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
    this.SetStyle(ControlStyles.DoubleBuffer, true);// 双缓冲
    this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);// 双缓冲
    this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); //透明效果
     
    注意:.net1.1 和 .net 2.0 在处理控件双缓冲上是有区别的。
       .net 1.1 中,使用:this.SetStyle(ControlStyles.DoubleBuffer, true);
       .net 2.0中,使用:this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
     
    ---------------------------------------------------------------------------------------
     
     
    方法三:
    SetStyle(ControlStyles.UserPaint, true);//控件自行重绘
    SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
    SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
     
     
    2、利用反射设置DataGridView的双缓冲。
     
    ///
    /// 为DataGridView控件设置双缓冲
    ///
    /// 要设置双缓冲的DataGridView控件
    /// 是否使用双缓冲
    public void SetDoubleBufferedForDataGridView(ref DataGridView control, bool isDoubleBuffered)
    {
    //获取控件的Type
    Type dgvType = control.GetType();
     
     
    //通过Type获取控件的指定属性
     
     
    //BindingFlags.Instance                    指定实例成员将包括在搜索中
    //BindingFlags.NonPublic                 指定非公共成员将包括在搜索中
    PropertyInfo properInfo = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
     
    //为控件的属性设置值
    properInfo.SetValue(control, isDoubleBuffered, null);
    }
     
     
    最后,调用SetDoubleBufferedForDataGridView()方法就行了。
  • 相关阅读:
    月亮,还是馅饼(2)
    月亮,还是馅饼(1)
    spread 论坛
    kaok website
    提升 .NET 程序性能的 一些 原则
    sql convert
    sql 中 MSDTC 不可用。
    判断sql执行所花的时间(精度为毫秒)
    35岁以前成功的12条黄金法则
    快速删除表中的数据
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6262287.html
Copyright © 2011-2022 走看看