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 に答える