Combobox.SelectedIndexChanged的行为

时间:2013-04-13 07:55:26

标签: c# winforms events combobox

请查看下面的代码。当应用程序启动时,将调用SelectedIndexChanged,并且x的类型为“Example”。但是当应用程序运行并且你选择了一些不同的SelectedIndexChanged产生一个结果x类型的float。为什么会产生不同的结果?

{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            var example = new List<Example>();

            example.Add(new Example("A", 100f));
            example.Add(new Example("B", 200f));
            example.Add(new Example("C", 400f));

            this.comboBox1.DataSource = example;

            this.comboBox1.DisplayMember = "Description";
            this.comboBox1.ValueMember = "Value";
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            var x = this.comboBox1.SelectedValue;
        }
    }

    public class Example
    {
        public Example(string desc, float val)
        {
            this.Description = desc;
            this.Value = val;
        }

        public string Description { get; set; }
        public float Value { get; set; }
    }
}

1 个答案:

答案 0 :(得分:1)

在发布我的问题之前,我尝试了不同的事情并找到答案:

在设置DataSource时触发SelectedIndexChanged。在此特定时刻,程序不知道哪个列是DisplayMember和ValueMember,并返回类型Example。

要获得预期结果,首先必须告诉控件使用什么作为DisplayMember和ValueMember以及设置数据源后的

this.comboBox1.DisplayMember = "Description";
this.comboBox1.ValueMember = "Value";
this.comboBox1.DataSource = example;