Windows窗体combobox控件的奇怪行为

我正在开发一个小型桌面应用程序,我的表单上有几个下拉列表(combobox-es)。 我填充了一个字符串列表,这些字符串将用作所有字符串的数据源。 这是我的Form.cs类的示例:

List datasource = new List(); datasource.Add("string 1"); datasource.Add("string 2"); 

然后我将此列表设置为几个combobox的数据源:

  cmbDataType1.DataSource = datasource; cmbDataType2.DataSource = datasource; 

这一切都发生在同一个方法中,从Form构造函数调用。 这是一个奇怪的部分:在我更改其中一个中的选定值后,将在另一个中设置相同的值。 没有设置SelectedIndexChange事件。 我搞砸了某个地方,但我不能把手指放在哪里……

您看到的行为是设计的。 将多个控件的数据源绑定到同一对象时,所有控件都共享相同的绑定源。

如果您为每个控件显式分配了一个新的绑定源,即使使用相同的数据源,所有控件都将被解除绑定,并且彼此独立运行:

 cmbDataType1.DataSource = new BindingSource(datasource, ""); cmbDataType2.DataSource = new BindingSource(datasource, ""); 

您应该在下次绑定dataSource之前为控件设置新的BindingContext :

 cmbDataType1.BindingContext = new BindingContext(); cmbDataType1.DataSource = datasource; cmbDataType2.BindingContext = new BindingContext(); cmbDataType2.DataSource = datasource; 

由于您绑定的是与预期行为相同的精确datasource 。 如果您不希望更改选定项,则需要将绑定更改为OneWay绑定或使用不同的对象。