ComboBox SelectedValue未按预期工作

时间:2018-01-08 17:22:46

标签: c# winforms combobox

comboBox.Items.AddRange(Enumerable.Range(18, 38).Cast<object>().ToArray());
comboBox.SelectedIndex = 0;
Console.WriteLine(comboBox.SelectedValue + "test");

我只是“测试”没有打印出“18”。即使我阅读了指南,我也无法清楚地理解SelectedValue和SelectedItem之间的区别。

1 个答案:

答案 0 :(得分:1)

在Winforms中,您需要设置ComboBox的the ValueMember property以使SelectedValue正常工作。如果您使用具有UserName属性的ID类填充了您的组合框,则可以将DisplayMember设置为"Name",将ValueMember设置为"ID",然后SelectedValue将是所选ID对象的User值。在这种情况下,SelectedItem将是用户选择的整个User对象。当然,你必须施展它:User user = comboBox2.SelectedItem as User;

如果ValueMembernull""SelectedValue将始终为null。这就是你所看到的。

您使用整数填充组合框,这些整数没有值属性。他们的价值。所以你想要的是SelectedItem,它给你用户选择的整个对象(一个整数是一个对象,以它自己的简单方式):

comboBox.Items.AddRange(Enumerable.Range(18, 38).Cast<object>().ToArray());
comboBox.SelectedIndex = 0;
Console.WriteLine(comboBox.SelectedItem + "test");

这个问题被标记为WPF,但我不相信这是真的。在WPF ComboBox.Items中没有AddRange()方法。但是,在winforms中,它确实是its parameter is object[]的类型。所以在winforms中,你的代码会编译,而.Cast<object>().ToArray()部分是有意义的。我的信念是你使用winforms。

或者,可能是您已成功在WPF项目中创建System.Windows.Forms.ComboBox的实例。如果是这种情况,我建议使用WPF组合框控件。