我是c#的新手。我在combobox
中添加了几个键值对项。当我运行应用程序时,它向我显示了combobox
中默认的初始键和值。但是当我选择了另一个项目时,我得到了例外:
对不起我的英语!!提前谢谢。
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);
}
答案 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";
指示组合框ValueMember
与Key
相关联。因此,当您访问组合框的SelectedValue
属性时,它将返回Key
属性的类型。在您的情况下将是int
。由于您要将int
转换为KeyValuePair<int, string>
,原因显而易见,您将获得该例外。
SelectedValue
会返回ValueMember
,因此会在您的情况下返回int
。
SelectedItem
返回整个对象,以便在您的情况下返回KeyValuePair<int, string>
。