积极答复者
ListView如何避免或减少不断重绘产生的闪烁?

问题
答案
-
需要给ListView设置双缓冲,代码如下(假设ListView1在Form1中):
Imports System.Reflection Public Class Form1 Public Sub New() ' 此调用是设计器所必需的。 InitializeComponent() ' 在 InitializeComponent() 调用之后添加任何初始化。 Dim mi As MethodInfo = GetType(Control).GetMethod("SetStyle", BindingFlags.Instance Or BindingFlags.NonPublic) mi.Invoke(ListView1, New Object() {ControlStyles.OptimizedDoubleBuffer, True}) End Sub End Class
注意一定要在窗体的构造函数里面给ListView设置双缓冲,在其他地方设置会无效。
- 已编辑 lapheal 2014年4月23日 6:10
- 已建议为答案 Carl CaiModerator 2014年4月23日 6:46
- 已标记为答案 大海怪 2014年4月23日 7:36
全部回复
-
需要给ListView设置双缓冲,代码如下(假设ListView1在Form1中):
Imports System.Reflection Public Class Form1 Public Sub New() ' 此调用是设计器所必需的。 InitializeComponent() ' 在 InitializeComponent() 调用之后添加任何初始化。 Dim mi As MethodInfo = GetType(Control).GetMethod("SetStyle", BindingFlags.Instance Or BindingFlags.NonPublic) mi.Invoke(ListView1, New Object() {ControlStyles.OptimizedDoubleBuffer, True}) End Sub End Class
注意一定要在窗体的构造函数里面给ListView设置双缓冲,在其他地方设置会无效。
- 已编辑 lapheal 2014年4月23日 6:10
- 已建议为答案 Carl CaiModerator 2014年4月23日 6:46
- 已标记为答案 大海怪 2014年4月23日 7:36
-
谢谢回复!
1.新建Form1
2.添加ListView(.Dock=Fill,.View=List)
3.添加Timer(.Enabled=True,.Interval=500)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.ListView1.BeginUpdate()
For i = 1 To 100
Me.ListView1.Items.Add(String.Format("列表项{0}", i))
Next
Me.ListView1.EndUpdate()
End SubPrivate Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim i As Integer = Rnd() * 100
If i < 100 Then
With Me.ListView1.Items(i)
If .BackColor = Color.Red Then
.BackColor = Color.White
Else
.BackColor = Color.Red
End If
End With
End If
End Sub
End Class韩立学