gpt4 book ai didi

c# - ComboBoxes 是链接的(这很糟糕)

转载 作者:太空狗 更新时间:2023-10-29 22:09:08 25 4
gpt4 key购买 nike

我正在做简单的 WinForms 应用程序,但遇到了一些奇怪的问题。

我的表单:

enter image description here

尽可能简单:3 个组合框和两个按钮 - 确定和取消。

查看:

private void applyOrderButton_Click(object sender, EventArgs e)
{
List<string> testList = new List<string>()
{
"A",
"B",
"C"
};

comboBox1st.DataSource = testList;
comboBox2nd.DataSource = testList;
comboBox3rd.DataSource = testList;

comboBox1st.SelectedIndex = 2;
comboBox2nd.SelectedIndex = 1;
comboBox3rd.SelectedIndex = 0;
//Presenter.DoTest();
}

在调用方法 applyOrderButton_Click() 之后会发生什么(在单击“确定”按钮后发生)我所有的组合框都更改了选定的位置。但是,这些组合框中的每一个都具有相同的选定索引 - 在这种特殊情况下它将是“A”。

然后我使用光标更改更改组合框 selectedIndex(例如,我选择第 3 个组合框以显示“C”),对所有三个组合框执行更改。我做错了什么?

最佳答案

您遇到了 WinForms 后台存在的称为“CurrencyManager”的东西。

它的工作是在引用同一数据源的所有可绑定(bind)控件之间同步“当前记录”。

例如,如果您添加了一个标签并将其绑定(bind)到同一个列表,并绑定(bind)它以显示其中一个对象的属性,它将始终显示您在中选择的同一对象的属性值组合框。

这样做的一个好处是,您可以轻松添加一个表单来编辑对象列表、将文本框等绑定(bind)到其中一个对象的属性,并添加一个允许您移动到下一行或上一行的导航器。您不必手动确保所有文本框都引用正确的对象,CurrencyManager 会为您完成这一切。

但是,在您的情况下,由于您将相同的数据源绑定(bind)到所有三个组合框,因此 CurrencyManager 将确保所有三个组合框都选择同一行。如果您在其中一个组合框中选择一个新行,CurrencyManager 将修复所有其他组合框以引用同一行。

您可以通过多种方式解决此问题:

  1. 您可以覆盖每个组合框的绑定(bind)上下文:

    comboBox2nd.BindingContext = new BindingContext();
    comboBox3rd.BindingContext = new BindingContext();

    请注意,如果您选择这条路线,则需要在分配 SelectedIndex 或 SelectedItem 属性之前执行此操作,否则 CurrencyManager 将在您分配新的 BindingContext 之前更新其他两个组合框。

  2. 您可以为每个组合框分配不同的数据源:

    combobox2nd.DataSource = testList.ToList();
    combobox3rd.DataSource = testList.ToList();

关于c# - ComboBoxes 是链接的(这很糟糕),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33385016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com