Listview暂停和恢复

时间:2012-02-25 07:32:42

标签: vb.net

如何使SuspendLayout和ResumeLayout在列表视图方面正常工作。我在添加项目之前和之后添加了这些代码行,但是当我添加每个项目时,每个项目仍然显示。

感谢

  • 我的代码:

        Dim x As Integer
    
    Dim startTick As Integer = Environment.TickCount
    
    lstFiles.SuspendLayout()
    
    For x = 0 To UBound(cacheListArray)
        If cacheListArray(x) Like "*.txt" Then
            lstFiles.Items.Add(cacheListArray(x))
        End If
    Next
    
    lstFiles.ResumeLayout()
    
    MsgBox(Environment.TickCount - startTick)
    

我正在添加2000个项目。这需要7秒。我被告知它应该比这短得多。这是对的吗?


新代码:

        Dim ListViewItemArray(-1) As ListViewItem

                ReDim Preserve ListViewItemArray(UBound(ListViewItemArray) + 1)
            ListViewItemArray(UBound(ListViewItemArray)).Text = file.Name
            ListViewItemArray(UBound(ListViewItemArray)).SubItems.Add(file.FullName)
            ListViewItemArray(UBound(ListViewItemArray)).SubItems.Add(file.Length)
            ListViewItemArray(UBound(ListViewItemArray)).SubItems.Add(file.CreationTime)
            ListViewItemArray(UBound(ListViewItemArray)).SubItems.Add(file.LastWriteTime)
            ListViewItemArray(UBound(ListViewItemArray)).SubItems.Add(file.LastAccessTime)

        lstFiles.Items.AddRange(ListViewItemArray)

没有添加任何内容。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您使用的是错误的方法。 Suspend / ResumeLayout()方法仅适用于其子控件要移动的容器控件,而不会在执行此操作时重新绘制它们。你永远不会给ListView任何子控件。

改为使用Begin / EndUpdate()方法。