У меня есть ListView, который я заполняю содержимым ImageList.Когда элемент выбран из списка, я проверяю, существует ли файл.Если этого не произойдет, я хочу удалить его как из списка изображений (который является частным статическим), так и из ListView.По какой-то странной причине, которую я не могу понять, после удаления выбранного изображения из списка, изображение сразу после него исчезает, и последнее изображение в списке появляется дважды.Например, если в списке содержались следующие изображения: IMG1, IMG2, IMG3, IMG4, IMG5 и я удаляю IMG2 , новый список будет выглядеть следующим образом: IMG1, IMG4, IMG5, IMG5 .
Кроме того, если я выберу второе изображение из списка (которое теперь IMG4 ) и отобразит его в каком-либо элементе управления изображением, IMG3 , который должен был находиться в этом месте, будет отображаться в элементе управления.
Есть идеи, что здесь происходит?
РЕДАКТИРОВАТЬ: Заполнение представления списка:
private static ImageList stampsImages
if (stampsImages == null)
{
stampsImages = new ImageList();
stampsImages.ImageSize = new Size(125, 75);
}
DirectoryInfo di = new DirectoryInfo(Globals.Directory);
if (di.Exists)
{
FileInfo[] dFiles = di.GetFiles("*.png");
int stampListSize = stampsImages.Images.Count;
for (int i = 0; i < dFiles.Length; i++)
{
int idx = stampsImages.Images.IndexOfKey(dFiles[i].FullName);
if (idx < 0)
{
stampsImages.Images.Add(Bitmap.FromFile(dFiles[i].FullName));
stampsImages.Images[stampListSize].Tag = dFiles[i].FullName;
stampsImages.Images.SetKeyName(stampListSize, dFiles[i].FullName);
stampListSize++;
}
}
}
else di.Create();
for (int i = 0; i < stampsImages.Images.Count; i++)
{
ListViewItem stmp = new ListViewItem("", i);
lvwStamps.Items.Add(stmp);
}
lvwStamps.LargeImageList = stampsImages;
Проверка наличия файла:
private bool IsStampAvailable(int listIdx)
{
bool stampExists = true;
string stampFile = stampsImages.Images.Keys[listIdx];
if (!File.Exists(stampFile))
{
lvwStamps.Items.RemoveAt(listIdx);
stampsImages.Images.RemoveAt(listIdx);
stampExists = false;
}
return stampExists;
}