假设你正在做的事情如下

List<string> myitems = new List<string>
{
    "Item 1",
    "Item 2",
    "Item 3"
};

ComboBox box = new ComboBox();
box.DataSource = myitems;

ComboBox box2 = new ComboBox();
box2.DataSource = myitems

所以现在我们有2组合框开这阵列,以及一切工作正常。但是当你改变价值的一种组合框,它改变了这两个组合框到一个你刚才选择的。

现在,我知道,这阵总是通过参考(了解到,当我得知C:D),但为什么在地球上的组合框改变在一起吗?我不认为组合框控制是修改收集的。

作为一种解决办法,不要这将实现的功能,这些功能预期的/需要的

ComboBox box = new ComboBox();
box.DataSource = myitems.ToArray();
有帮助吗?

解决方案

这与数据如何绑定设立在dotnet框架,尤其是 BindingContext.在一个高水平这意味着,如果你没有指定,否则各种形式和所有制的形式共享相同的 BindingContext.当你设置的 DataSource 酒店的 ComboBox 将使用 BindingContext 得到一个 ConcurrenyMangager 包装的清单。的 ConcurrenyManager 跟踪这样的事情,因为当前的选择在列表中的位置。

当你设置的 DataSource 第二 ComboBox 它将使用相同的 BindingContext (形式),它将产生一个参照相同的 ConcurrencyManager 作为上述用来设立数据绑定。

以获得更详细的解释见 BindingContext.

其他提示

一个更好的解决办法(根据大小的数据源)是宣布两个 BindingSource 对象(新的2.00)结合收集到的那些,然后结合这些的组合框.

我附上一个完整的示例。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        private BindingSource source1 = new BindingSource();
        private BindingSource source2 = new BindingSource();

        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1Load);
        }

        void Form1Load(object sender, EventArgs e)
        {
            List<string> myitems = new List<string>
            {
                "Item 1",
                "Item 2",
                "Item 3"
            };

            ComboBox box = new ComboBox();
            box.Bounds = new Rectangle(10, 10, 100, 50);
            source1.DataSource = myitems;
            box.DataSource = source1;

            ComboBox box2 = new ComboBox();
            box2.Bounds = new Rectangle(10, 80, 100, 50);
            source2.DataSource = myitems;
            box2.DataSource = source2;

            Controls.Add(box);
            Controls.Add(box2);
        }
    }
}

如果你想要混淆自己甚至更多的然后试试总是宣称的绑定在构造。这可能导致一些 真的 奇怪的错误,因此我总是绑定在装载活动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top