2013-02-10 91 views
2

我使用comboBox.Items.Add(entry);将项目添加到组合框。但是我怎样才能避免组合框中的重复条目(即同名条目)。是否有任何的lib功能组合框重复条目

回答

11

检查的项目加入之前:

if (!comboBox.Items.Contains(entry)) 
    comboBox.Items.Add(entry); 
+0

thanxs。此外,是否有任何功能相同的'Items.AddRange' – user1903439 2013-02-10 18:09:47

+1

编号只需在循环中检查它们。 – 2013-02-10 19:18:02

5

Items集合有一个Contains方法

if (!comboBox.Items.Contains(entry)) { 
    comboBox.Items.Add(entry); 
} 

ComboBox.Items属性是System.Windows.Forms.ComboBox.ObjectCollection类型,它声明像这样的Contains方法

public bool Contains(object value) 

如果你想使用AddRange,你必须提供一个数组中的项目。因此,您必须确保此数组不包含重复项。此外,如果ComboBox已包含项目,则必须确保此数组不包含相同的项目。

让我们首先假设ComboBox是空的,您的项目是由一些枚举给出(这可能是比如List<T>或数组):

comboBox.Items.AddRange(
    itemsToAdd 
     .Distinct() 
     .ToArray() 
); 

你必须在顶部有一个using System.Linq;你的代码。你也可能想订购这些物品。我认为他们是string类型:

comboBox.Items.AddRange(
    itemsToAdd 
     .Distinct() 
     .OrderBy(s => s) 
     .ToArray() 
); 

如果ComboBox已包含的项目,你将不得不从添加的项目

comboBox.Items.AddRange(
    itemsToAdd 
     .Except(comboBox.Items.Cast<string>()) 
     .Distinct() 
     .OrderBy(s => s) 
     .ToArray() 
); 

(同样假设itemsToAdd是排除它们字符串的枚举。)

1

使用一个HashSet类的控件绑定,如何从演示技术实际上还要考虑,或使用Distinct LINQ过滤重复项的方法。

0

如何铸造项目String

var check = comboBox1.Items.Cast<string>().Any(c => c.ToString() == "test");