繁体   English   中英

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

[英]Why when adding items to combobox it's adding the same item many times?

在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个项目。 当我使用断点并查看结果时,当我单击索引0中的第一个项目时,我会看到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);
    }
}

或者您可以按照本文的建议进行操作,并在添加新项目以删除冲突之前删除所有相同的项目,以消除列表框中的重复项,或者也可以使用相同的方式从组合框中停止重复项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM