这个 Winforms 项目有问题。尝试在通过以下方式填充字典propList的组合框上使用 SelectedIndexChanged 事件:
comboBox1.DataSource = new BindingSource(propList, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
这是事件本身:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox comboBox = (ComboBox)sender;
//comboBox.DataSource = null;
System.Collections.Generic.KeyValuePair<int, string> dummy =
(System.Collections.Generic.KeyValuePair<int, string>)
comboBox.SelectedItem;
//comboBox1.DataSource = new BindingSource(propList, null);
PopulateCollars(dummy.Key);
}
然后它在 KeyValuePair 演员表上抛出这个:
Items collection cannot be modified when the DataSource property is set
我知道这是适当的演员阵容,因为调试表明:
SelectedItem ~~~ object System.Collections.Generic.KeyValuePair<int,string>}
那么我的问题是,为什么显式转换会修改项目集合?在 C++ 上长大,其中强制转换不会修改他们正在强制转换的数据,这对我来说没有意义。
请注意,使用注释掉的行会导致空引用异常,因为显然将数据源设置为空会擦除组合框中的所有成员。