据我所知,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};
答案 0 :(得分: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}}的项目中的第一项,并将其设置为所选项目。如果没有此类商品,则1
设置为null
。
答案 1 :(得分:0)
this.comboBoxSelektion.SelectedValue = 1;