хочу избежать дублирования изображений в списке C # .NET - PullRequest
0 голосов
/ 21 марта 2011

Я использую imagelist с компонентом listview в первый раз, я хотел перечислить изображения.проблема, с которой я сталкиваюсь, заключается в том, что я не могу избежать дублирования изображений при добавлении изображений снова в просмотр списка.пожалуйста, посмотрите следующий код и дайте мне знать, где я иду не так

OpenFileDialog addImages = new OpenFileDialog();
        addImages.Filter = "JPEG (*.jpg)|*.jpg";
        addImages.Multiselect = true;
        if (addImages.ShowDialog(this) == DialogResult.OK)
        {
            foreach (string filename in addImages.FileNames)
            {
                try
                {
                    if (this.imageList1.Images.ContainsKey(filename) == false)
                    {
                        this.imageList1.Images.Add(filename, Image.FromFile(filename));
                    }
                }
                catch{}
            }
            this.listView1.View = View.LargeIcon;
            this.listView1.LargeImageList = this.imageList1;

            for (int i = 0; i < this.imageList1.Images.Count; i++)
            {
                if (this.listView1.Items.ContainsKey(this.imageList1.Images.Keys[i]) == false)
                {
                    ListViewItem li = new ListViewItem();
                    li.ImageIndex = i;
                    li.ImageKey = this.imageList1.Images.Keys[i];
                    li.Text = Path.GetFileName(this.imageList1.Images.Keys[i]);
                    this.listView1.Items.Add(li);
                }
            }
        }

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Вы использовали функцию «ContainsKey» для дублирования.

this.listView1.Items.ContainsKey()

MSDN говорят: «Свойство Name соответствует ключу для ListViewItem в ListView.ListViewItemCollection.»

Так что вам нужно установить имя вашего ListViewItem.

0 голосов
/ 21 марта 2011

Я не до конца понимаю ваш вопрос, но есть несколько вещей, которые вы можете сделать.

  1. добавить this.listView1.Items.Clear() в функцию перед циклом for.В следующий раз, когда вы откроете OpenFileDialog, вы добавите элементы в пустой просмотр списка.

  2. добавьте имя файла в каждый тег LiveViewItem.li.Tag = ...filepath....Затем каждый раз, когда вы добавляете новый элемент в listView, просто проверяйте, не содержит ли он элемент с этим тегом.

...