listview控件刷新数据时闪烁。请问有没有方法?

pp616 2001-11-04 06:04:01
我用listview显示数据。我需要每秒刷新一次控件内的数据。但是控件闪烁的很厉害
我用了两个来交替显示在Visible=false时刷新数据。
可以还是出现闪烁。
请高手帮帮我想想办法吧。
...全文
616 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt985 2002-01-14
  • 打赏
  • 举报
回复
43685关注! :)
cuiyxy 2001-11-05
  • 打赏
  • 举报
回复
我做过几个用listview实时显示数据的程序,
你说的情况,我也遇到了,我的解决方法是
将每一个“格子”内的“新数据”和“老数据”进行比较,
如不同,则刷新,否则不作任何处理

我的代码片段供参考
Private Sub RefreshLstVw()
'aryFTUInfo
Dim FtuArrDownMrk As Long
Dim FtuArrUpMrk As Long
Dim FtuArrCount As Long
Dim FtuCodeKey As String
Dim I As Long, J As Long
Dim LstItm As MSComctlLib.ListItem
Dim FtuExistInLstVw As Long
Dim FtuExistInArr As Boolean
Dim FndFtuCode As String
Dim TotalPw As Single
Static DelMrk As String
Dim ExistDspArr As Boolean
Dim DspI As Integer, DspFtuArrDownMrk As Integer, DspFtuArrUpMrk As Integer
Dim VUsrNm As String

On Error Resume Next

If DelMrk = "" Then '更替删除标志
DelMrk = " "
Else
DelMrk = ""
End If

FtuArrDownMrk = 0
FtuArrUpMrk = -1

DspFtuArrDownMrk = 0
DspFtuArrUpMrk = -1

FtuArrDownMrk = LBound(aryFTUInfo)
FtuArrUpMrk = UBound(aryFTUInfo)

DspFtuArrDownMrk = LBound(DsparyFTUInfo)
DspFtuArrUpMrk = UBound(DsparyFTUInfo)

On Error GoTo 0
If FtuArrUpMrk < FtuArrDownMrk Then
LstVwFtu.ListItems.Clear
End If
For I = FtuArrDownMrk To FtuArrUpMrk
ExistDspArr = False
VUsrNm = ""
For DspI = DspFtuArrDownMrk To DspFtuArrUpMrk
If aryFTUInfo(I).FTUData.FtuCode = DsparyFTUInfo(DspI).FtuCode Then
VUsrNm = DsparyFTUInfo(DspI).UserName
ExistDspArr = True
Exit For
End If
Next DspI

If ExistDspArr = True Then
FndFtuCode = "Ftu" + CStr(aryFTUInfo(I).FTUData.FtuCode)
FtuExistInLstVw = 0
For J = 1 To LstVwFtu.ListItems.Count
If LstVwFtu.ListItems(J).Key = FndFtuCode Then
FtuExistInLstVw = J
Exit For
End If
Next J
If FtuExistInLstVw = 0 Then
Set LstItm = LstVwFtu.ListItems.Add()
LstItm.Key = FndFtuCode
LstItm.Text = CStr(aryFTUInfo(I).FTUData.FtuCode)
LstItm.SubItems(1) = VUsrNm
Else
Set LstItm = LstVwFtu.ListItems(J)
End If

'=======================================================================
If LstItm.SubItems(18) <> Format(aryFTUInfo(I).FTUData.SaveTime, "hh:mm:ss") Then
LstItm.SubItems(18) = Format(aryFTUInfo(I).FTUData.SaveTime, "hh:mm:ss")

'计算总功率
TotalPw = aryFTUInfo(I).FTUData.UA * aryFTUInfo(I).FTUData.IA * aryFTUInfo(I).FTUData.A _
+ aryFTUInfo(I).FTUData.UC * aryFTUInfo(I).FTUData.IC * aryFTUInfo(I).FTUData.C
LstItm.SubItems(2) = Format(TotalPw, "0.0")
LstItm.SubItems(3) = Format(aryFTUInfo(I).FTUData.IA, "0.0")
LstItm.SubItems(4) = Format(aryFTUInfo(I).FTUData.UA, "0.0")
LstItm.SubItems(5) = Format(aryFTUInfo(I).FTUData.IB, "0.0")
LstItm.SubItems(6) = Format(aryFTUInfo(I).FTUData.UB, "0.0")
LstItm.SubItems(7) = Format(aryFTUInfo(I).FTUData.IC, "0.0")
LstItm.SubItems(8) = Format(aryFTUInfo(I).FTUData.UC, "0.0")

LstItm.SubItems(9) = Format(aryFTUInfo(I).FTUData.A, "0.00")
LstItm.SubItems(10) = Format(aryFTUInfo(I).FTUData.B, "0.00")
LstItm.SubItems(11) = Format(aryFTUInfo(I).FTUData.C, "0.00")

LstItm.SubItems(12) = Format(aryFTUInfo(I).FTUData.Wp, "0.0")
LstItm.SubItems(13) = Format(aryFTUInfo(I).FTUData.Wq, "0.0")
LstItm.SubItems(14) = Format(aryFTUInfo(I).FTUData.Pulsp, "0")
LstItm.SubItems(15) = Format(aryFTUInfo(I).FTUData.Pulsq, "0")
LstItm.SubItems(16) = Format(aryFTUInfo(I).FTUData.f, "0")
LstItm.SubItems(17) = Format(aryFTUInfo(I).FTUData.SumCutTime, "0")
End If
LstItm.SubItems(19) = DelMrk
'======================================================================
End If
Next I

For J = LstVwFtu.ListItems.Count To 1 Step -1
If LstVwFtu.ListItems(J).SubItems(19) <> DelMrk Then
LstVwFtu.ListItems.Remove (J)
End If
Next J

End Sub
mellow 2001-11-05
  • 打赏
  • 举报
回复
不要用了!
初始化刷新!
提取数据重新执行一次!
foolishtiger 2001-11-05
  • 打赏
  • 举报
回复
tg123(T.G.) 所说的是一条有效的解决方法,还有一种方法就是在ListView中只显示少量数据,当用户通过键盘或鼠标滚动ListView的显示区域时将要显示的数据显示出来.
举个例子,ListView中一次可显示一页10条数据,而要显示的有100条,那么你最开始就只显示最前面的10条用户点了下一页按钮或按了PageDown或拉动滚动条时,你就清除原来显示的内容,显示第11到20条数据,依此类推.
hhdsq 2001-11-04
  • 打赏
  • 举报
回复
热情关注,呵呵
dadi2001 2001-11-04
  • 打赏
  • 举报
回复
尽量不要采用数据绑定
tg123 2001-11-04
  • 打赏
  • 举报
回复
刷新之前检查数据是否变化
可以减少闪烁

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧