webmail123
Спасибо за ответ. Но я не совсем понял, о чем вы говорите. Можете ли вы предоставить пример кода, чтобы я получил четкое представление?
kmoorevs
//scope is same level as listView1
private List<string> strList = new List<string>();
Когда вы добавляете элемент в listView1, также добавьте его в strList, но только после того, как убедитесь, что он еще не существует в списке. (ранее вы были на правильном пути) вместо проверки значения в коллекции элементов listView проверьте общий список.
if (! strList.Contains(epc))
{
listView1.Items.Add(new ListViewItem(epc));
strList.Add(epc);
}
Недостатком этого решения является то, что вы должны поддерживать список, что достаточно просто. Когда вы удаляете или даже редактируете элемент в listview, убедитесь, что вы также удаляете или редактируете из списка. Вот чтобы удалить выбранные элементы:
foreach (ListViewItem l in listView1.SelectedItems)
{
strList.Remove(l.Text);
l.Remove();
}
Еще один хак, который я использовал раньше, - это сохранение строки с разделителями. Это будет выглядеть примерно так:
private string delimitedString = "";
//when adding item(s) to listview
if (!delimitedString.Contains("|" + epc + "|"))
{
listView1.Items.Add(new ListViewItem(epc));
if (listView1.Items.Count == 1)
{
delimitedString = "|";
}
delimitedString += epc + "|";
}
//when removing item(s) also remove from the delimited string like this:
foreach (ListViewItem l in listView1.SelectedItems)
{
delimitedString = delimitedString.Replace("|" + l.Text + "|", "|");
l.Remove();
}
webmail123
Эй.. Большое спасибо. Таким образом, я фактически избежал цикла, который поможет мне увеличить производительность. Большое вам спасибо за Ваш вклад. :-)