分享ComboBox DataSource

Jak*_*ake 11 c# combobox winforms

请问为什么两个组合框都互相触发,以便两者具有相同的值?我不能共享一个列表,并有2个组合框具有不同的选定文本?

private void Form1_Load(object sender, EventArgs e)
    {
        BindingList<string> list = new BindingList<string>();
        list.Add("A");
        list.Add("B");
        list.Add("C");
        list.Add("D");

        bind(cbo1, list);
        bind(cbo2, list);
    }

    private void bind(ComboBox combobox, BindingList<string> list)
    {
        // commented lines are in actual code,
        // but appears unimportant in this question
        //combobox.DropDownStyle = ComboBoxStyle.DropDown;
        //combobox.AutoCompleteSource = AutoCompleteSource.ListItems;
        //combobox.AutoCompleteMode = AutoCompleteMode.Suggest;
        combobox.DataSource = list;
        //combobox.Focus();
        //combobox.Text = string.Empty;
        //combobox.SelectedText = string.Empty;
    }
Run Code Online (Sandbox Code Playgroud)

更新:好的,现在我发现问题是DataSource由一些BindingContext和CurrencyManager管理,以自动同步列表.但我觉得有人必须知道如何禁用这种行为.

我不希望使用2个不同的列表,因为我希望能够在运行时修改此单个列表,并将更改反映在所有ComboBox上.任何实现这一目标的方法都将非常感激.

Hen*_*man 8

你可以像这样"解决"它:

// combobox.DataSource = list;
var curr = new BindingSource(list, null);        
combobox.DataSource = curr;
Run Code Online (Sandbox Code Playgroud)

有一个默认的BindingSource(Currencymanager)链接到每个Form保持2 cbx同步.但我不确定这里的具体规则是什么.我甚至不确定以上是否是个好主意.

对于小清单,我只会制作单独的副本.