ListView <-> ImageList не будет синхронизироваться

Я использую ListView для загрузки и отображения миниатюр для файлов изображений. "Имя" или ключ, который я использую для каждого ListViewItem - это полное имя файла.

Я также создал ImageList, который загружает миниатюры этих файлов, используя тот же ключ. Я назначил этот ImageList как свойство "SmallImageList" ListView.

Когда я добавляю и удаляю файлы, я добавляю и удаляю их по ключам из коллекций ListView.Items и ImageList.Images.

Все это прекрасно работает при загрузке многих изображений. Однако, когда я пытаюсь удалить данный ключ, элемент управления ListView больше не отображает эскизы должным образом.

До и после удаления элемента:

ДоПосле

Когда во время отладки я анализирую оба набора коллекций в памяти, ключи выстраиваются идеально.

Используемый код:

// 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 ответ

Решение

Что происходит ясно, если у вас есть ListViewItem привязан к индексу изображения 5 и вы удаляете изображение в положении 4, 5 сдвигается до 4, и элемент сохраняет ссылку на 5 так не показывает ни одного изображения.

Я думаю, что вы не должны удалять изображения из ImageList при удалении выбранных элементов ListView.

Другие вопросы по тегам