为什么在向组合框添加项目时多次添加相同的项目?

时间:2015-06-16 15:06:23

标签: c# .net winforms

在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。 例如,我运行程序并选择标题天气现在我想在messageBow中看到。显示id 1

共有31项。 当我使用断点并查看结果时,我看到31项当我点击索引0中的第一项时我看到Id =“1”然后我点击片段并看到标题“天气”

然后我对索引1中的项目做同样的事情,我看到Id =“19”,在片段中标题是“animals”。

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

3 个答案:

答案 0 :(得分:4)

每次要在组合框中添加新项目时,都要创建一个新的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);
}

答案 1 :(得分:1)

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

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);

答案 2 :(得分:0)

你可以做一个简单的检查,以确保在插入之前组合框还没有包含它。

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);
    }
}

或者您可以像本文一样建议并删除每个相同的项目,然后再添加新项目以删除冲突,No Duplicate in a Listbox or using the same way to stop duplicates from a combobox too