在WIN2000下,加上与不加上 listview1.visible = false 的区别不大。 在我的机器上测试结果是: For i = 1 To 10000 s = "1234567890987654321" & i Set itm = ListView1.ListItems.Add(, , s) Next 总共添加1万条记录, 加上listview1.visible = false需要时间448毫秒, 不使用listview1.visible = false需要时间420毫秒, 如果只有1000条记录,大约需要38毫秒 ----------------------- 由此看来,你的上千条记录添加到ListView1中,只需要一眨眼的功夫
Private Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Long) As Long【说明】 锁定指定窗口,禁止它更新。同时只能有一个窗口处于锁定状态 【返回值】 Long,非零表示成功,零表示失败(比如另外已有一个窗口锁定) 【备注】 windows会跟踪锁定窗口的区域,并会在窗口解锁后重画它们。可用GetDCEx获得一个特殊的设备场景,令其与锁定窗口协同工作,从而描绘一个加锁的窗口。这种技术的一个应用场合是创建跟踪矩形(比如用于改变窗口大小的矩形)【参数表】 hwndLock ------- Long,欲锁定窗口的句柄。如设为零,则对窗口解锁 我用的就是这个,但这提速提不了多少,只是防止闪烁而已
LockWindowUpdate (API) 这个东西有没有用啊,前面有人提到过的,谁用过?
Public Type RECT Left As Long ' Top As Long ' Right As Long ' Bottom As Long ' End Type Public Declare Function GetClientRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT) Public Declare Function InvalidateRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) Public Declare Function ValidateRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT)dim rc as rect getclientrect(listview1.hwnd,rc)for i=1 to rst.RecordCount Set itm = ListView1.ListItems.Add(, , rst("DocName"), , FileStyle) . . . Do Events vallideaterect(listview1.hwnd,rc) nextinvalidaterect(listview1.hwnd,rc,true)
上千条记录肯定不会很慢,应该是你的代码有问题,最好等到listview显示完了以后再处理其他事情
这段代码可以试一下,注意调整ii的值,以达到理想的效果 Public Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As LongPrivate Sub Command1_Click() dim ii as integer ii=100 Text1.Text = Time ListView1.View = lvwReport ListView1.ColumnHeaders.Add , "haa", "test" For i = 1 To 100000 If i Mod ii = 0 Then Call LockWindowUpdate(0) Else Call LockWindowUpdate(ListView1.hwnd) End If ListView1.ListItems.Add , "c" & i, i DoEvents Next Text2.Text = Time End Sub
listview1.visible = false或
LockWindowUpdate (API)
前者更简单好用。
什么意思?
看不见。也太
listview是主窗口阿,隐藏了就什么都没了,别人不会满意的
for ...
...
next
listview1.enabled=truepls try it!
LockWindowUpdate (API)?
Chice_wxg说的清楚点好么?
listview1.visible = false
的区别不大。
在我的机器上测试结果是:
For i = 1 To 10000
s = "1234567890987654321" & i
Set itm = ListView1.ListItems.Add(, , s)
Next
总共添加1万条记录,
加上listview1.visible = false需要时间448毫秒,
不使用listview1.visible = false需要时间420毫秒,
如果只有1000条记录,大约需要38毫秒
-----------------------
由此看来,你的上千条记录添加到ListView1中,只需要一眨眼的功夫
每rst.movenext在listview中加一行
而且,数据库是在光盘上的....就更慢了
如果没有doevents,我试过了,起码20s以后才能全部显示出来
锁定指定窗口,禁止它更新。同时只能有一个窗口处于锁定状态 【返回值】
Long,非零表示成功,零表示失败(比如另外已有一个窗口锁定) 【备注】
windows会跟踪锁定窗口的区域,并会在窗口解锁后重画它们。可用GetDCEx获得一个特殊的设备场景,令其与锁定窗口协同工作,从而描绘一个加锁的窗口。这种技术的一个应用场合是创建跟踪矩形(比如用于改变窗口大小的矩形)【参数表】
hwndLock ------- Long,欲锁定窗口的句柄。如设为零,则对窗口解锁
我用的就是这个,但这提速提不了多少,只是防止闪烁而已
这个东西有没有用啊,前面有人提到过的,谁用过?
Left As Long '
Top As Long '
Right As Long '
Bottom As Long '
End Type
Public Declare Function GetClientRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT)
Public Declare Function InvalidateRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long)
Public Declare Function ValidateRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT)dim rc as rect
getclientrect(listview1.hwnd,rc)for i=1 to rst.RecordCount
Set itm = ListView1.ListItems.Add(, , rst("DocName"), , FileStyle)
.
.
.
Do Events
vallideaterect(listview1.hwnd,rc)
nextinvalidaterect(listview1.hwnd,rc,true)
Public Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As LongPrivate Sub Command1_Click()
dim ii as integer ii=100
Text1.Text = Time
ListView1.View = lvwReport
ListView1.ColumnHeaders.Add , "haa", "test"
For i = 1 To 100000
If i Mod ii = 0 Then
Call LockWindowUpdate(0)
Else
Call LockWindowUpdate(ListView1.hwnd)
End If
ListView1.ListItems.Add , "c" & i, i
DoEvents
Next
Text2.Text = Time
End Sub