[英]C# windows forms ComboBox trouble
为什么我在Combobox.SelectedValue中有null? SelectedItem不是null,它是一个匿名对象。 DisplayMember工作正常。
var item1 =
new
{
Name = "some phrase1",
Value = 0
};
var item2 =
new
{
Name = "some phrase2",
Value = 1
};
_cmb = new ComboBox();
_cmb.Items.Add(item1);
_cmb.Items.Add(item2);
_cmb.DisplayMember = "Name";
_cmb.ValueMember = "Value";
//.....
//onchange method
{
var nulled = _cmb.SelectedValue //why it's null???
}
显然是因为组合框没有选定的项目。
http://msdn.microsoft.com/zh-CN/library/system.windows.forms.combobox.selecteditem.aspx
作为当前选定项目的对象;如果没有当前选定项目,则为null。
编辑; 我已经对其进行了测试,如果您选择它,它将返回一个对象……您无法访问其属性,因为匿名对象,但是您可以使用反射或声明一个类,接口或结构并使用它。
如果您得到null,则组合框没有选定的项目。
不幸的是,ComboBox无法与匿名类型一起使用。
有一个在整个对象SelectedItem
属性,但是你没有直接访问其属性的方式,因为他们是在一个匿名类型。
您可以使用反射(但不应使用反射),也可以使用“键/名称”和“值”属性创建一个非匿名类型,然后改用该类型。
或者KeyValuePair<T, T>
如果只有键/名称和值KeyValuePair<T, T>
则使用内置的KeyValuePair<T, T>
:
var item1 = new KeyValuePair<string, int>("some phrase1", 0);
var item2 = new KeyValuePair<string, int>("some phrase2", 1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.