Если вы хотите отобразить содержимое одной папки за раз, тогда утилизируйте объекты в вашем ImageList.
Если вы хотите показать содержимое более чем одной папки, вам нужно указать новый индекс добавленного изображения. Вместо этого вы добавляете новый элемент в ListView, используя ту же ссылку индекса:
int i = 0;
//(...)
listView1.Items.Add($"{Path.GetFileNameWithoutExtension(file)}", i++);
Индексатор (i
) всегда начинается с 0
, поэтому элемент ListView будет использовать изображения из вашего списка изображений, начиная с изображения с Index[0]
каждый раз. Новые изображения никогда не будут показаны.
Вы можете использовать значение ImageList.Images.Count
, представляющее количество изображений, уже добавленных в ImageList, в качестве базы и увеличивать индексатор, начиная с этого значения:
private void button1_Click(object sender, EventArgs e)
{
int i = imageList1.Images.Count;
var ic = new ImageCollection();
var fbd = new FolderBrowserDialog();
fbd.Description = "Select meme folder or image.";
if (fbd.ShowDialog() == DialogResult.OK)
{
foreach (var file in Directory.GetFiles(fbd.SelectedPath))
{
if (!ic.CheckIfImage(file)) continue;
imageList1.Images.Add(new Bitmap(file, true));
listView1.Items.Add($"{Path.GetFileNameWithoutExtension(file)}", i++);
}
}
}
Если вы разрешаете удалить изображение из ListView, вы также должны удалить его из ImageList: это означает, что вам необходимо переиндексировать все элементы ListView, начиная с элемента, следующего за удаленным.
Не забудьте утилизировать изображения, которые вы удаляете из списка изображений.