2012-02-25 10 views
0

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) 

何も追加されています。何を私は間違ってやったのですか?

+0

あなたのコードを示すのに役立つかもしれません。人々のESPに欠陥があるかもしれません。 – simchona

答えて

0

間違った方法を使用しています。 Suspend/ResumeLayout()メソッドは、子コントロールを移動しながら移動したくないコンテナコントロールにのみ適切です。 ListViewに子コントロールを与えることは決してありません。

代わりにBegin/EndUpdate()メソッドを使用してください。

+0

ありがとうHans。それはそれをスピードアップします。今4秒。それは2000項目に対して正しいと思いますか?私は数ミリ秒かかると言われました。その情報は正しいですか? – Garry

+0

さて、あなたは先です。次は、ListView.Items.AddRange()メソッドを利用して、項目を1つずつではなくまとめて追加します。 –

+0

それを見つけました。私はこのコード行が必要でした: - ListViewItemArray(UBound(ListViewItemArray))=新しいListViewItem – Garry

関連する問題