指定的强制转换在选择组合框值时无效

时间:2017-01-15 13:03:48

标签: c# winforms

我是c#的新手。我在combobox中添加了几个键值对项。当我运行应用程序时,它向我显示了combobox中默认的初始键和值。但是当我选择了另一个项目时,我得到了例外:

Specified Cast is not valid

对不起我的英语!!提前谢谢。

public void Category_Load()
    {
        Dictionary<int, string> dict = new Dictionary<int, string>();
        dict.Add(-1, "Select");
        dict.Add(0,"CR");
        dict.Add(1,"Analysis");
        dict.Add(2,"Misc");
        comboBox1.DataSource = new BindingSource(dict, null);
        comboBox1.DisplayMember = "Value";
        comboBox1.ValueMember = "Key";
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

     string value = ((KeyValuePair<int,string>)comboBox1.SelectedValue).Value.ToString();
        MessageBox.Show("" + value);
        int key = ((KeyValuePair<int, string>)comboBox1.SelectedValue).Key;
        MessageBox.Show("" + key);

    }

2 个答案:

答案 0 :(得分:1)

SelectedValue包含所选项目的值部分。您的演员表无效,因为SelectedValue将返回int(在您的情况下),而不是KeyValuePair<int, string>

使用SelectedItem属性而不是SelectedValue属性 要获取密钥,您只需将SelectedValue的值转换为int。

即可
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

 string value = ((KeyValuePair<int,string>)comboBox1.SelectedItem).Value.ToString();
    MessageBox.Show("" + value);
    int key = (int)comboBox1.SelectedValue;
    MessageBox.Show("" + key);

}

答案 1 :(得分:0)

这行代码:

comboBox1.ValueMember = "Key";

指示组合框ValueMemberKey相关联。因此,当您访问组合框的SelectedValue属性时,它将返回Key属性的类型。在您的情况下将是int。由于您要将int转换为KeyValuePair<int, string>,原因显而易见,您将获得该例外。

SelectedValue会返回ValueMember,因此会在您的情况下返回int

SelectedItem返回整个对象,以便在您的情况下返回KeyValuePair<int, string>