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()方法就行了。
  • 相关阅读:
    计算机网络笔记6-应用层
    计算机网络笔记5-传输层
    计算机网络笔记4-网络层
    计算机组成原理笔记7-输入输出系统
    计算机组成原理笔记6-总线
    计算机组成原理笔记5-中央处理器
    计算机网络笔记3-数据链路层
    计算机组成原理笔记4-指令系统
    计算机组成原理笔记3-存储系统
    信息安全数学基础笔记
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6262287.html
Copyright © 2011-2022 走看看