c# windows窗体的组合框问题
本文关键字:问题 组合 windows 窗体 | 更新日期: 2023-09-27 18:11:19
为什么我在Combobox.SelectedValue为空?SelectedItem不为空,它是匿名对象。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/en-us/library/system.windows.forms.combobox.selecteditem.aspx当前选定项的对象,如果没有则为空当前选择项。
编辑;我已经测试过了,如果你选择它,它会返回一个对象…你不能访问它的属性,因为它是匿名对象,但你可以使用反射或声明一个类、接口或结构体并使用它。
如果你得到null,那么这个组合框没有被选中的项目。
不幸的是,ComboBox不能像匿名类型那样工作。
是 SelectedItem
属性中的整个对象,但是您无法直接访问其属性,因为它们是匿名类型。
你可以使用反射(但你不应该),或者创建一个具有Key/Name和Value属性的非匿名类型,然后使用它。
或使用内置的KeyValuePair<T, T>
,如果你只有键/名称和值:
var item1 = new KeyValuePair<string, int>("some phrase1", 0);
var item2 = new KeyValuePair<string, int>("some phrase2", 1);