方法一
首先定義類,將此類放在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);
}
其實很簡單的,一看代碼就能明白,使用雙緩沖解決閃爍問題
