ListView <-> ImageList не будет синхронизироваться - PullRequest
1 голос
/ 27 октября 2011

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

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

Когда я добавляю и удаляю файлы, я добавляю и удаляю их по ключу как из 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 Ответ

1 голос
/ 27 октября 2011

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

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

...