C# 中DataGridView和ListView閃爍問題的解決方法

C# 中DataGridView和ListView閃爍問題的解決方法this


方法一
首先定義類,將此類放在datagridview或ListView所在的窗體類外面,而後代碼以下,spa

<span style="font-family:Microsoft YaHei;font-size:18px;">// <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();
}
}</span>
方法二
直接寫一個擴展方法,使用反射,直接上代碼,將此類定義給DataGirdView或ListView所在的窗體類外面便可
<span style="font-family:Microsoft YaHei;font-size:18px;">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);
}

}</span>.net

//調用方法
<span style="font-family:Microsoft YaHei;font-size:18px;">public Form1()
{
InitializeComponent();
DataGridView1.DoubleBufferedDataGirdView(true);
}</span>orm

其實很簡單的,一看代碼就能明白,使用雙緩衝解決閃爍問題blog

---------------------
做者:ching126
來源:CSDN
原文:https://blog.csdn.net/chenhongwu666/article/details/43305503
版權聲明:本文爲博主原創文章,轉載請附上博文連接!it

相關文章
相關標籤/搜索