如何防止重复项listView C#

我正在使用Windows Forms 。 使用此代码,我从comboBoxlistView添加项目。

 ListViewItem lvi = new ListViewItem(); lvi.Text = comboBox1.Text; lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add("") if (!listView1.Items.Contains(lvi)) { listView1.Items.Add(lvi); } 

我需要防止重复的项目,但不能工作,我该如何解决这个问题?

您应该使用ContainsKey(string key)而不是Contains(ListViewItem item)

 var txt = comboBox1.Text; if (!listView1.Items.ContainsKey(txt)) { lvi.Text = txt; // this is the key that ContainsKey uses. you might want to use the value // of the ComboBox or something else, depending the combobox is freetext // or regarding your scenario. lvi.Name = txt; lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add(""); lvi.SubItems.Add(""); listView1.Items.Add(lvi); } 

ListView类提供了一些检查项是否存在的方法:

  • Contains On Items collection ,和
  • FindItemWithText方法

它可以像:

 // assuming you had a pre-existing item ListViewItem item = ListView1.FindItemWithText("item_key"); if (item == null) { // item does not exist } // you can also use the overloaded method to match subitems ListViewItem item = ListView1.FindItemWithText("sub_item_text", true, 0); 

这段代码对我有用:

 if(DialogResult.OK == fileDialogue.ShowDialog()) { foreach (var v in fileDialogue.FileNames) { if (listView.FindItemWithText(v) == null) { listView.Items.Add(v); } else //Throw error message 
 if (!listView1.Items.Any(i => i.text == lvi.text)) { listView1.items.Add(lvi) } 

我只是猜测文本属性,但我很确定那里有。

或者 – 只需要一个List并将其用作列表的数据源。

 String csVal = Value; ListViewItem csItem = new ListViewItem(csVal); if (!listViewABC.Items.ContainsKey(csVal)) { csItem.Name = csVal; listViewABC.Items.Add(csItem ); }