3

我正在使用comboBox.Items.Add(entry);. 但是如何避免组合框中的重复条目(即同名条目)。有没有lib函数

4

4 回答 4

12

添加前检查项目:

if (!comboBox.Items.Contains(entry))
    comboBox.Items.Add(entry);
于 2013-02-10T18:01:28.777 回答
4

Items集合有一个Contains方法

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

ComboBox.Items属性是 type 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是字符串的枚举。)

于 2013-02-10T18:03:05.553 回答
1

使用HashSet类绑定控件,具体如何取决于表示技术,或者使用 LINQ 的Distinct方法过滤重复项。

于 2013-02-10T18:04:57.987 回答
0

将物品投射到String

var check = comboBox1.Items.Cast<string>().Any(c => c.ToString() == "test");
于 2013-02-11T16:14:43.180 回答