繁体   English   中英

C#Windows窗体ComboBox麻烦

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM