动态更改comboBox中的项目

时间:2014-08-27 19:42:46

标签: c# winforms combobox

我有两个comboBox个对象,它们通过Design redactor指定了相同的项目。

如果在第一个组合框中选择了任何特定项目,则必须从第二个组合框中删除它。

我目前的工作:

1)添加了这个

static ComboBox.ObjectCollection defaultCollection;

2)在Form_Load

defaultCollection = comboBoxRange1.Items;

3)

private void comboBoxRange1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBoxRange2.Enabled = true;
    ComboBox.ObjectCollection copyCollection = defaultCollection;
    copyCollection.RemoveAt(comboBoxRange1.SelectedIndex);
    comboBoxRange2.DataSource = copyCollection;
}

但在此之后,我从两个组合框中删除了所选项目并且defaultCollection被修改。我如何解决它?我是否需要复制集合或在每次更改时手动重新组合值?

2 个答案:

答案 0 :(得分:1)

您不是要创建集合的副本,而只是创建一个引用与第一个集合相同的集合的新变量。使用哪个变量删除项目并不重要,您仍然只有一个由2个变量引用的集合并绑定到2个组合框。

答案 1 :(得分:1)

ComboBox.ObjectCollection copyCollection = defaultCollection;无法执行您想要的操作:它不会复制,而是设置对defaultCollection的引用。

以下是关于变量是按参考设置还是按值设置的更多解释:如果数据是 value type ,基本上是结构和枚举(比如int,这是System.Int32的别名),数据的将被复制做任务;如果数据是 reference type ,基本上是类,接口和委托,则在执行赋值时,对象的引用将传递到LHS。

至于你的问题,是的,你需要制作一份副本以保持defaultCollection不被修改。