haodd 发表于 2011-11-20 16:44:40

_GUICtrlListView_DeleteAllItems 太慢

本帖最后由 haodd 于 2011-11-20 19:00 编辑

有没有更快清空 listview 的所有记录的办法

我的机器 双核的
清空超过 8000+条时就能看到
感觉_GUICtrlListView_DeleteAllItems是一条一条从后面删除的

不是一下子清空的

bdancerlc 发表于 2011-11-20 17:13:02

你清空的时候又多少列表?   我这边挺快的,...

haodd 发表于 2011-11-20 17:21:14

本帖最后由 haodd 于 2011-11-20 19:00 编辑

有8各项左右
item 有 5000+ 到 8000+ 不等

_GUICtrlListView_DeleteAllItems 清空需要2.5秒甚至到3秒才能清空

haodd 发表于 2011-11-20 19:01:13

顶一下 等大神

pusofalse 发表于 2011-11-20 19:21:09

原来一直在等吗? 打开GUIListView.au3,找到_GUICtrlListView_DeleteAllItems函数,看下内部是怎样工作的吧。

haodd 发表于 2011-11-20 19:53:24

Func _GUICtrlListView_DeleteAllItems($hWnd)
        If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)

        If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
        If IsHWnd($hWnd) Then
                Return _SendMessage($hWnd, $LVM_DELETEALLITEMS) <> 0
        Else
                Local $ctrlID
                For $index = _GUICtrlListView_GetItemCount($hWnd) - 1 To 0 Step -1
                        $ctrlID = _GUICtrlListView_GetItemParam($hWnd, $index)
                        If $ctrlID Then GUICtrlDelete($ctrlID)
                Next
                If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
        EndIf
        Return False
EndFunc   ;==>_GUICtrlListView_DeleteAllItems

haodd 发表于 2011-11-20 19:54:19

回复 5# pusofalse Func _GUICtrlListView_DeleteAllItems($hWnd)
      If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)

      If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
      If IsHWnd($hWnd) Then
                Return _SendMessage($hWnd, $LVM_DELETEALLITEMS) <> 0
      Else
                Local $ctrlID
                For $index = _GUICtrlListView_GetItemCount($hWnd) - 1 To 0 Step -1
                        $ctrlID = _GUICtrlListView_GetItemParam($hWnd, $index)
                        If $ctrlID Then GUICtrlDelete($ctrlID)
                Next
                If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
      EndIf
      Return False
EndFunc   ;==>_GUICtrlListView_DeleteAllItems不是很了解

有时候同样的 条数 清空很快 有时候清空有些慢

诚心求解?

南一 发表于 2011-11-20 21:02:04

换一种思路呢,将Listview控件del掉,然后再重新画一个控件呢,是不是对于数据很多的,速度会相对来说快一些。

yeqing880 发表于 2011-12-2 13:15:31

GUICtrlSendMsg($listview1, $LVM_DELETEALLITEMS, 0, 0)

非常快

netegg 发表于 2011-12-2 17:11:53

回复 9# yeqing880
$listview1不是句柄呢
页: [1]
查看完整版本: _GUICtrlListView_DeleteAllItems 太慢