0

我第一次使用带有 listview 组件的 imagelist,我想要的是列出图像。我面临的问题是在将图像再次添加到列表视图时无法避免重复图像。请查看以下代码,让我知道我哪里出错了

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);
                }
            }
        }
4

2 回答 2

1

您使用“ContainsKey”功能进行重复。

this.listView1.Items.ContainsKey()

MSDN说:“Name 属性对应于 ListView.ListViewItemCollection 中 ListViewItem 的键。”

因此,您需要设置 ListViewItem 的名称。

于 2011-03-21T13:36:12.283 回答
0

我不完全理解你的问题,但你可以做一些事情。

  1. this.listView1.Items.Clear()在函数中,在 for 循环之前添加 a 。下次打开 OpenFileDialog 时,会将项目添加到空列表视图中。

  2. 在每个 LiveViewItem 标记中添加文件名。li.Tag = ...filepath.... 然后每次向 listView 添加新项目时,只需检查它是否还没有包含带有该标签的项目。

于 2011-03-21T13:33:17.423 回答