comboBox.Items.AddRange(Enumerable.Range(18, 38).Cast<object>().ToArray());
comboBox.SelectedIndex = 0;
Console.WriteLine(comboBox.SelectedValue + "test");
我只是“测试”没有打印出“18”。即使我阅读了指南,我也无法清楚地理解SelectedValue和SelectedItem之间的区别。
答案 0 :(得分:1)
在Winforms中,您需要设置ComboBox的the ValueMember
property以使SelectedValue
正常工作。如果您使用具有User
和Name
属性的ID
类填充了您的组合框,则可以将DisplayMember
设置为"Name"
,将ValueMember
设置为"ID"
,然后SelectedValue
将是所选ID
对象的User
值。在这种情况下,SelectedItem
将是用户选择的整个User
对象。当然,你必须施展它:User user = comboBox2.SelectedItem as User;
。
如果ValueMember
为null
或""
,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组合框控件。