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()方法就行了。
  • 相关阅读:
    使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
    JDBC-自定义数据库工具类(DBService)
    Dbutils学习(介绍和入门)
    JAVA中简单的MD5加密类(MD5Utils)
    TCP/IP网络编程系列之三(初级)
    Linux C编程学习
    sharepoint 2010 创建自定义的ASP.NET Web Service (上)
    TCP/IP网络编程系列之四(初级)
    TCP/IP网络编程系列之二(初级)
    TCP/IP网络编程系列之一(初级)
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6262287.html
Copyright © 2011-2022 走看看