想要避免列表视图中的重复图像 C# .NET

发布于 2024-10-25 00:11:59 字数 1353 浏览 6 评论 0原文

我第一次使用 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);
                }
            }
        }

I am using imagelist with listview component for the firs time, what i wanted is to list images. the problem i am facing is i couldn't avoid duplicate images while adding images again to listview. please see following code and let me know where i am going wrong

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谁人与我共长歌 2024-11-01 00:11:59

您使用函数“ContainsKey”进行重复。

this.listView1.Items.ContainsKey()

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

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

You used the function "ContainsKey" for duplicate.

this.listView1.Items.ContainsKey()

MSDN say : " The Name property corresponds to the key for a ListViewItem in the ListView.ListViewItemCollection."

So you need to set the name of your ListViewItem.

南城追梦 2024-11-01 00:11:59

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

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

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

I don't fully understand your question, but there are a few things that you could do.

  1. add a this.listView1.Items.Clear() in the function, before the for-loop. Next time you open the OpenFileDialog you will add items to an empty listview.

  2. add the filename in each LiveViewItem tag. li.Tag = ...filepath.... Then every time you add a new item to the listView, just check if it doesn't already contain an item with that tag.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文