我有两个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
被修改。我如何解决它?我是否需要复制集合或在每次更改时手动重新组合值?
答案 0 :(得分:1)
您不是要创建集合的副本,而只是创建一个引用与第一个集合相同的集合的新变量。使用哪个变量删除项目并不重要,您仍然只有一个由2个变量引用的集合并绑定到2个组合框。
答案 1 :(得分:1)
ComboBox.ObjectCollection copyCollection = defaultCollection;
无法执行您想要的操作:它不会复制,而是设置对defaultCollection
的引用。
以下是关于变量是按参考设置还是按值设置的更多解释:如果数据是 value type ,基本上是结构和枚举(比如int
,这是System.Int32
的别名),数据的值将被复制做任务;如果数据是 reference type ,基本上是类,接口和委托,则在执行赋值时,对象的引用将传递到LHS。
至于你的问题,是的,你需要制作一份副本以保持defaultCollection
不被修改。