为什么在将项目添加到组合框时,它会多次添加相同的项目

本文关键字:项目 添加 组合 为什么 | 更新日期: 2023-09-27 17:56:38

在form1的顶部:

public class ComboboxItem
        {
            public string Text { get; set; }
            public object Value { get; set; }
            public override string ToString()
            {
                return Text;
            }
        }
        List<string> results = new List<string>();

然后:

ComboboxItem item = new ComboboxItem();
var result = videoCatagories.Execute();
for (int i = 0; i < result.Items.Count; i++)
            {
                item.Text = result.Items[i].Snippet.Title;
                item.Value = result.Items[i].Id;
                comboBox1.Items.Add(item);
            }

最后:

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            MessageBox.Show((comboBox1.SelectedItem as ComboboxItem).Value.ToString());
        }

一般来说,我想做的是将标题添加到组合框中,然后在我选择标题以获取标题 ID 时。例如,我运行程序并选择标题"天气现在我想在消息中查看Bow.显示 id 1

有 31 项。当我使用断点并查看结果时,当我单击索引 31 中的第一项时,我看到 Id = "1",然后我单击代码段并看到标题"天气"

然后我对索引 1 中的项目执行相同的操作,我看到 Id = "19",在代码段中标题是"动物"。

但出于某种原因,它会多次添加每个迭代相同的项目。

为什么在将项目添加到组合框时,它会多次添加相同的项目

每次要向组合框添加新项时,创建一个 ComboboxItem 的新实例:

for (int i = 0; i < result.Items.Count; i++)
{
    ComboboxItem item = new ComboboxItem();
    item.Text = result.Items[i].Snippet.Title;
    item.Value = result.Items[i].Id;
    comboBox1.Items.Add(item);
}

代码更改结果中每个条目的同一项实例的属性,然后将其添加到comboBox1.Items集合中。 Add将其参数插入到 Items 集合,则不会复制其内容。因此,在呈现组合框时,所有组合框项都指向同一项。为避免这种情况,请为 results 中的每个条目创建一个新的 item 实例:

for (int i = 0; i < result.Items.Count; i++)
{
    var item=new ComboboxItem 
             {                 
                   Text = result.Items[i].Snippet.Title,
                   Value = result.Items[i].Id
             };
    comboBox1.Items.Add(item);
}

var items=from item in result
          select new ComboboxItem 
             {                 
                   Text = item.Snippet.Title,
                   Value = item.Id
             };
comboBox1.Items.AddRange(items);

在进行插入之前,您可以进行简单的检查以确保组合框尚未包含它。

ComboboxItem item = new ComboboxItem();
var result = videoCatagories.Execute();
for (int i = 0; i < result.Items.Count - 1; i++)
{
    if(!comboBox1.Items.Contains(item))
    {
            item.Text = result.Items[i].Snippet.Title;
            item.Value = result.Items[i].Id;
            comboBox1.Items.Add(item);
    }
}

或者,您可以按照本文的建议进行操作,并在添加新项目以删除冲突之前删除每个相同的项目,列表框中没有重复项或使用相同的方法来阻止组合框中的重复