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???
       }

c# windows窗体的组合框问题

显然是因为组合框没有选择项。

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);