【发布时间】:2011-06-19 04:36:00
【问题描述】:
请问为什么两个组合框会相互触发以使两者具有相同的值? 我不能共享一个列表并有 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;
}
更新: 好的,现在我发现问题是 DataSource 由一些 BindingContext 和 CurrencyManager 管理以自动同步列表。但我觉得一定有人知道如何禁用这种行为。
我不希望使用 2 个不同的列表,因为我希望能够在运行时修改这个单个列表并将更改反映在所有 ComboBox 上。任何实现这一目标的方法将不胜感激。
【问题讨论】:
-
好的,我可以确认一下。您可以(应该)将
bind()简化为cbo1.DataSource = list; -
我不知道确切的原因,简化是为了更好地定义(缩小)问题。
-
@Henk 我只是缩小了范围!谢谢 =)