2011-10-26 4 views
1

ListView를 사용하여 이미지 파일의 축소판을로드하고 표시합니다. "Name"또는 각 ListViewItem에 대해 사용하는 키는 정규화 된 파일 이름입니다.ListView <--> ImageList가 동기화되지 않습니다.

동일한 키를 사용하여 파일의 미리보기 이미지를로드하는 ImageList도 만들었습니다. 이 ImageList를 ListView의 "SmallImageList"속성으로 할당했습니다.

파일을 추가 및 제거 할 때 List30.Items 및 ImageList.Images 컬렉션에서 키으로 을 추가 및 제거합니다.

많은 이미지를로드 할 때이 모든 기능이 정상적으로 작동합니다. 그러나 주어진 키를 삭제하려고하면 ListView 컨트롤에 더 이상 축소판이 제대로 표시되지 않습니다.

은 전에하고 항목을 삭제 한 후 : 내가 디버깅하는 동안 메모리에 모두 수집 배열을 분석 할 때

Before After

는 키는 완벽하게 일렬로.

코드를 사용 : 당신이 ListViewItem 이미지 인덱스 5에 바인딩하고 위치 4에서 이미지를 삭제할 경우

무슨 일
// 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

이 분명하다, 4 아래 5 변화와 항목에 대한 참조를 유지 5에 표시되므로 이미지가 표시되지 않습니다.

선택한 ListView 항목을 제거 할 때 ImageList에서 이미지를 제거하면 안됩니다.

+0

감사합니다. –

+2

메모리가 심각하게 누출되지 않습니까? 목록에서 이미지를 절대 제거하지 않고 코드를 계속 실행하면 대부분의 이미지가 사용되지 않는 거대한 ImageList로 끝납니다. 어떻게이 문제를 해결할 수 있을까요? –

+0

이미지를 삭제하고 아이템 포인트를 올바른 인덱스로 유지하는 솔루션 [이 게시물을 참조하십시오] (http://stackoverflow.com/questions/39916598/removing-listviewitem-with-image-from-listview)/39920779 # 39920779) – TaW

관련 문제