如何将带有文本/索引项的组合框设置为特定项

时间:2012-05-15 07:58:36

标签: c# .net winforms

据我所知,Windows窗体中的组合框只能容纳一个值。我需要一个文本和索引,所以我创建了这个小课程:

public class ComboboxItem { 
    public string Text { get; set; } 
    public object Value { get; set; } 
    public override string ToString() 
    { 
        return Text; 
    }
}

我将一个Item添加到组合框中,如下所示:

ComboboxItem item = new ComboboxItem()
{
    Text = select.Item1,
    Value = select.Item2
};

this.comboBoxSelektion.Items.Add(item);

现在问我的问题:如何将组合框设置为特定项目? 我尝试过这个,但那不起作用:

this.comboBoxSelektion.SelectedItem = new ComboboxItem() { Text = "Text", Value = 1};

2 个答案:

答案 0 :(得分:2)

您提供的最后一个代码示例不起作用,因为ComboBox中的项目和您通过new创建的项目是不同的实例(=内存引用),它们不相同(两个不同的内存指针)即使它们是相同的(它们的成员具有相同的值)。仅仅因为两个对象包含相同的数据并不能使它们成为同一个对象 - 它使它们成为两个相同的不同对象。

这就是为什么o1 == o2o1.Equals(o2);之间通常存在很大差异。

示例:

ComboboxItem item1 = new ComboBoxItem() { Text = "Text", Value = 1 };
ComboboxItem item2 = new ComboBoxItem() { Text = "Text", Value = 1 };
ComboboxItem item3 = item1;

item1 == item2      => false
item1.Equals(item2) => true, if the Equals-method is implemented accordingly
item1 == item3      => true!! item3 "points to the same object" as item1
item2.Equals(item3) => true, as above

您需要做的是找到添加到列表中的相同实例。您可以尝试以下方法:

this.comboBoxSelektion.SelectedItem = (from ComboBoxItem i in this.comboBoxSelektion.Items where i.Value == 1 select i).FirstOrDefault();

这将选择分配给值为ComboBox的{​​{1}}的项目中的第一项,并将其设置为所选项目。如果没有此类商品,则1设置为null

答案 1 :(得分:0)

this.comboBoxSelektion.SelectedValue = 1;