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()方法就行了。
  • 相关阅读:
    Mysql(7) _常用函数
    Mysql(6)_ 帮助的使用
    Mysql(5)_ 基本数据类型-时间
    Mysql(4)_整型和浮点型
    1 HTTP请求头Header及其作用详解
    Java(35) _JDBC批量插入数据二
    Java(34)_ 用JDBC批量向数据库插入语句
    Java(33)_ JDBC指针移动
    Mysql(3)_ Mycat简介
    Mysql(2)_ binlog文件
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6262287.html
Copyright © 2011-2022 走看看