2011-03-21 85 views
0

我使用listlist組件的imagelist第一次,我想要的是列出圖像。我面臨的問題是我無法避免重複的圖像,而再次添加圖像到列表視圖。請看下面的代碼,讓我知道我錯了想在列表視圖中避免重複的圖像C#.NET

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

回答

1

您使用函數「ContainsKey」進行重複。

this.listView1.Items.ContainsKey() 

MSDN說:「的名稱屬性對應於在ListView.ListViewItemCollection一個ListViewItem的關鍵。」

所以你需要設置ListViewItem的名稱。

0

我不完全明白你的問題,但也有幾件事情,你可以做。

  1. 在for循環之前在函數中添加一個this.listView1.Items.Clear()。下次你打開OpenFileDialog時,你會添加項目到一個空的列表視圖。

  2. 在每個LiveViewItem標記中添加文件名。 li.Tag = ...filepath...。然後,每次向listView添加新項目時,只需檢查它是否已經包含具有該標籤的項目。