2011-02-01 48 views
11

請問爲什麼這兩個組合框相互觸發,使得兩者具有相同的價值觀? 我不能共享一個列表,並有兩個組合框和不同的選定文本?分享的ComboBox的DataSource

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; 
    } 

UPDATE: 好了,現在我發現的問題是,數據源是由一些的BindingContext和CurrencyManager的管理,以自動同步列表。但我覺得有人必須知道如何禁用這種行爲。

我不希望用2名不同的名單,因爲我希望能夠在運行時修改這個單一的列表,並有改變在所有組合框反映。任何方法來實現這一點將不勝感激。

+0

OK,我可以證實這一點。你可以(應該)簡化`bind()的`只是`cbo1.DataSource =名單;` – 2011-02-01 10:47:40

+0

@Henk有什麼需要注意的? – Jake 2011-02-01 10:48:50

+0

我不知道確切的原因,簡化是更好地定義(縮小)問題。 – 2011-02-01 10:51:26

回答

7

可以「解決」這樣的:

// combobox.DataSource = list; 
var curr = new BindingSource(list, null);   
combobox.DataSource = curr; 

有鏈接到被保持2 CBX同步各自形成一個默認的BindingSource(CurrencyManager的)。但我不確定這裏的確切規則是什麼。我甚至不確定上述是否是一個好主意。

對於小名單,我只想做單獨的副本。

0

不能使用同一個對象作爲數據源爲2個獨立的組合框。您應該定義list1list2,併爲每個組合框填充每個組合框。使用相同的數據源意味着一個組合框中的選擇會反映在另一個組合框中。