2011-10-26 19 views
1

ListViewを使用してイメージファイルのサムネイルを読み込んで表示しています。各ListViewItemに使用している「名前」またはキーは、完全修飾ファイル名です。ListView <--> ImageListが同期しない

同じキーを使用してファイルのサムネイルを読み込むImageListも作成しました。このImageListをListViewの "SmallImageList"プロパティとして割り当てました。

ファイルを追加したり削除したりするときに、をListwise.ItemsコレクションとImageList.Imagesコレクションのキーで追加して削除します。

多くの画像を読み込むときは、このすべてが問題なく動作します。しかし、特定のキーを削除しようとすると、ListViewコントロールはサムネイルを適切に表示しなくなります。前とアイテムを削除した後

BeforeAfter

Iデバッグ中にメモリの両方のコレクション配列を解析する場合、キーは完全に並びます。

コードを使用:

// Add the images from an array of paths 
foreach (string xFile in files) 
{ 
    thumbnails_imageList.Images.Add(xFile, images[xFile]); 
    files_lst.Items.Add(xFile, Path.GetFileNameWithoutExtension(xFile), xFile); 
} 

// Delete the selected key(s) 
foreach (ListViewItem xItem in files_lst.SelectedItems) 
{ 
    files_lst.Items.Remove(xItem); 
    thumbnails_imageList.Images.RemoveByKey(xItem.Name); 
} 
+0

コードをインデックスベースのキーに変換したところ、まったく同じ問題が発生しています。 –

+0

イメージを削除してアイテムポイントを正しいインデックスに保つソリューションについては、この記事を参照してください(http://stackoverflow.com/questions/39916598/removing-listviewitem-with-image-from-listview/39920779#39920779) – TaW

答えて

1

あなたがイメージインデックス5にバインドされたListViewItemを持っていて、5つのシフトダウン4に、位置4で画像を削除した項目は、基準を維持した場合に何が起こることは、明らかであるが5に表示されるので、画像は表示されません。

選択したListViewアイテムを削除すると、画像をImageListから削除しないでください。

+0

ありがとうございました! –

+2

これは深刻なメモリリークはありませんか?リストからイメージを削除したことがなく、コードを何度も実行し続けると、大部分のイメージが使用されない巨大なイメージリストになります。どうやってこれを回避しますか? –

+0

イメージを削除してアイテムポイントを正しいインデックスに保つソリューションについては、この記事を参照してください(http://stackoverflow.com/questions/39916598/removing-listviewitem-with-image-from-listview/39920779#39920779) – TaW

関連する問題