2012-05-15 77 views
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}; 

回答

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並將其設置爲所選項目的值項的第一個項目。如果沒有這樣的項目,則null被設置爲SelectedItem

+0

謝謝。幾乎完美。你只需要在比較中將i.value轉換爲一個int值就可以了。 – Luke

+0

+1是的,你是對的:) –

+0

@Luke:這是因爲'Value'被聲明爲'object'。 –

0
this.comboBoxSelektion.SelectedValue = 1; 
+0

對不起,這沒有奏效。 – Luke

相關問題