首页 > 编程语言 >C# 中DataGridView和ListView闪烁问题的解决方法

C# 中DataGridView和ListView闪烁问题的解决方法

时间:2022-10-17 00:22:34浏览次数:46  
标签:C# 闪烁 DataGridView ControlStyles ListView public DoubleBufferListView

方法一

首先定义类,将此类放在datagridview或ListView所在的窗体类外面,然后代码如下,

///<summary>
/// 双缓冲DataGridView,解决闪烁
/// 使用方法:在DataGridView所在窗体的InitializeComponent方法中更改控件类型实例化语句将
/// this.dataGridView1 = new System.Windows.Forms.DataGridView();   屏蔽掉,添加下面这句即可
/// this.dataGridView1 = new DoubleBufferListView();
/// </summary>
class DoubleBufferDataGridView : DataGridView
{
    public DoubleBufferDataGridView()
    {
        SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
        //UpdateStatus.Continue;
        UpdateStyles();
    }
}
 
/// <summary>
/// 双缓冲ListView ,解决闪烁
/// 使用方法是在ListView 所在窗体的InitializeComponent方法中,更改控件类型实例化语句将
/// this.listView1 = new System.Windows.Forms.ListView();    屏蔽掉, 添加下面语句即可
/// this.listView1 = new DoubleBufferListView();
/// </summary>
class DoubleBufferListView : ListView
{
    public DoubleBufferListView()
    {
        SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
        UpdateStyles();
    }
}

方法二
直接写一个扩展方法,使用反射,直接上代码,将此类定义给DataGirdView或ListView所在的窗体类外面即可

public static class DoubleBufferDataGridView
{
    /// <summary>
    /// 双缓冲,解决闪烁问题
    /// </summary>
    /// <param name="dgv"></param>
    /// <param name="flag"></param>
    public static void DoubleBufferedDataGirdView(this DataGridView dgv, bool flag)
    {
        Type dgvType = dgv.GetType();
        PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
        pi.SetValue(dgv, flag, null);
    }
}
 
public static class DoubleBufferListView
{
    /// <summary>
    /// 双缓冲,解决闪烁问题
    /// </summary>
    /// <param name="lv"></param>
    /// <param name="flag"></param>
    public static void DoubleBufferedListView(this  ListView lv, bool flag)
    {
        Type lvType = lv.GetType();
        PropertyInfo pi = lvType.GetProperty("DoubleBuffered",
            BindingFlags.Instance | BindingFlags.NonPublic);
        pi.SetValue(lv, flag, null);
    }
 
}

//调用方法

public Form1()
{
    InitializeComponent();
    DataGridView1.DoubleBufferedDataGirdView(true);
}

———————
作者:ching126
来源:CSDN
原文:https://blog.csdn.net/chenhongwu666/article/details/43305503

标签:C#,闪烁,DataGridView,ControlStyles,ListView,public,DoubleBufferListView
From: https://www.cnblogs.com/firespeed/p/16797692.html

相关文章

  • 关于idea的servcies和debug功能,services中查看启动的服务没有调试工具栏
    今晚踩了这个坑。。。全网找了半天都解决不了。由于微服务项目必须用到services的这个功能来管理微服务项目的启动/停止,以及多个微服务部署。所以必须用到services这个功......
  • Chrome 分辨率测试
      在平时测试过程中,会经常听到兼容性测试等,今天就来整理一下,详细如下。1.兼容性测试概述1.1兼容性测试定义  兼容性测试是指验证被测系统在不同的硬件平台、不......
  • 在应用程序中替换Linux中Glibc的malloc的四种方法_转
    转自:在应用程序中替换Linux中Glibc的malloc的四种方法--csdn打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free......
  • TCL笔试复盘
    1.通信网按信息信号形式分为:按信息信号形式分为:模拟通信网、数字通信网、数字/模拟混合网等。2.将高级语言翻译成机器语言程序采用哪两种翻译方式:解释方式是将源程序逐句......
  • Vue CLI的详细介绍与讲解
    目录什么是VueCLICLI是什么意思?VueCLI使用前提安装Node.JScnpm安装VueCLI使用前提-WebpackVueCLI的使用VueCLI2选项详解目录结构详细Runtime-Compiler和Runtime-on......
  • idea中使用阿里巴巴开发手册插件----Alibaba Java Coding Guidelines
    AlibabaJavaCodingGuidelines p3cp3c是阿里巴巴所研发的代码规范插件,规范基于《阿里巴巴Java开发手册》,在IntelliJIDEA的插件管理中直接搜索AlibabaJavaCodingG......
  • C#--Path目录路径常用操作
    经常百度这个问题,经常记不住,以下是笔记:参考:https://blog.csdn.net/u011976734/article/details/79654399 定义 stringfilePath=@"E:/project/test/20180322.jpg";......
  • oracle学习笔记
    select*fromtest_all;--全量的数据insertintotest_all(ID,NAME,FISRT_FLG)values('1','aaa','1');insertintotest_all(ID,NAME,FISRT_FLG)values......
  • C++ 的类&对象
    C++在C语言的基础上增加了面对对象的编程,C++支持面向对象程序设计;类是C++的核心特性,用于指定对象的形式,类中的数据和方法称为类的成员。1.C++类的定义类定义是以关键......
  • java中的instanceof和类型转换
    java中的instanceof和类型转换父类代码如下:packageoop.Demo06;​publicclassPerson{  publicvoidrun(){    System.out.println("run"); }}​ ......