ListView< - > ImageList不会同步

时间:2011-10-26 20:53:21

标签: c# .net winforms listview imagelist

我使用ListView加载和显示图像文件的缩略图。我为每个ListViewItem使用的“名称”或键是完全限定的文件名。

我还创建了一个ImageList,它使用相同的密钥加载这些文件的缩略图。我已将此ImageList指定为ListView的“SmallImageList”属性。

当我添加和删除文件时,我会从ListView.Items和ImageList.Images集合中添加和删除按键

加载许多图像时,所有这些都能正常工作。但是,当我尝试删除给定的键时,ListView控件不再正确显示缩略图。

删除项目之前和之后:

Before After

当我在调试期间分析内存中的两个集合数组时,键完美排列。

使用的代码:

// 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);
}

1 个答案:

答案 0 :(得分:1)

发生的情况很明显,如果你有一个ListViewItem绑定到图像索引5而你删除位置4中的图像,那么5会移动到4并且该项目会保留一个引用5所以不显示任何图像。

我认为当您删除所选的ListView项目时,不应从ImageList删除图像。