-1

为什么我在 Combobox.SelectedValue 中有 null?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???
       }
4

2 回答 2

2

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

http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selecteditem.aspx

作为当前选定项的对象,如果当前没有选定项,则为 null。

编辑; 我已经对其进行了测试,如果您选择它,它会返回一个对象......您无法访问其属性,因为匿名对象,但您可以使用反射或声明一个类、接口或结构并使用它。

如果你得到 null 那么组合框没有选定的项目。

于 2013-04-28T21:54:46.080 回答
1

不幸的是,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);
于 2013-04-28T22:03:07.200 回答