2017-09-13 58 views
0

所以我有Combo Box,我有一个使用KeyValuePair<int, decimal>制作的列表。我希望我选择的文本框在我从下拉式文本框中选择时根据键显示值。从ComboBox Dropdown中选择后文本框不显示值

相关代码:

// Make a list of truck weight and MPG. 
List<KeyValuePair<int, decimal>> weightMPG = new List<KeyValuePair<int, decimal>>(); 

private void mainForm_Load(object sender, EventArgs e) 
{ 
    decimal k = 7; 
    for (int i = 20000; i < 40000; i+=1000){ 
     weightMPG.Add(new KeyValuePair<int, decimal>(i, k)); 
     k -= 0.1m; 
    } 
    for (int i = 40000; i < 45000; i+=1000){ 
     weightMPG.Add(new KeyValuePair<int, decimal>(i, 5)); 
    } 
    weightMPG.Add(new KeyValuePair<int, decimal>(46000, 4.9m)); 
    weightMPG.Add(new KeyValuePair<int, decimal>(47000, 4.8m)); 
    weightMPG.Add(new KeyValuePair<int, decimal>(48000, 4.7m)); 
    truckWeight2.DataSource = weightMPG; 
    truckWeight2.ValueMember = "Value"; 
    truckWeight2.DisplayMember = "Key"; 
} 

private void truckWeight2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    truckMPG2.Text = truckWeight2.ValueMember; 
} 

对于这段代码,它显示了从20,000到48,000下拉当我点击控制。但是,当我选择一个时,文本框(truckMPG2)不会更新以反映该值,而是始终显示单词“值”。

我在查看其他堆栈溢出的答案时,使这个代码,所以我不知道我错了。

回答

4

您正在阅读的.ValueMember属性:

truckMPG2.Text = truckWeight2.ValueMember; 

您专门设置为一个字符串:

truckWeight2.ValueMember = "Value"; 

这听起来像你想的.SelectedValue属性来代替:

truckMPG2.Text = truckWeight2.SelectedValue; 

或者,如果类型不匹配,但值可以直接表示为一个字符串,则可能需要追加.ToString()的值:

truckMPG2.Text = truckWeight2.SelectedValue.ToString(); 
+0

也许它会清除掉,但我基本上要在文本框中显示相应的十进制数。例如20,000 - > 7; 21,000-> 6.9等。我不知道为什么我将ValueMember设置为Value,我只是尝试从SO答案中获得东西。 – Annabelle

+0

@Annabelle:等等,当您将'.ValueMember'设置为'“Value”时,列表是否不显示正确的值?更改选择时,“.SelectedValue”是什么?不要从Stack Overflow的答案中复制/粘贴代码。特别是写执行你想要执行的操作的语句。如果您不确定给定语句的作用,请查看文档并在调试器中对其进行试验,以了解其功能。 – David

+0

列表本身显示正确的成员(键)。然而,我想要的值的文本框(例如7,6.9..etc)仅显示单词“值”。也使用'.SelectedValue;'时,我只是得到一个铸造错误。 – Annabelle

相关问题