1

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

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

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

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

this.comboBoxSelektion.Items.Add(item);

现在我的问题是:如何将组合框设置为特定项目?我试过这个,但没有奏效:

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

2 回答 2

2

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

o1 == o2这就是为什么和之间通常存在很大差异的原因o1.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设置为选定项目。如果没有该项目,null则设置为SelectedItem.

于 2012-05-15T08:19:06.547 回答
0
this.comboBoxSelektion.SelectedValue = 1;
于 2012-05-15T07:59:54.923 回答