gpt4 book ai didi

c# - 更改 ListBox 的选择会更改其他 ListBox 的选择。这是怎么回事?

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:17 26 4
gpt4 key购买 nike

我有一个 Windows 窗体应用程序,在同一个窗体上有两个 ListBox 控件。他们都将 SelectionMode 设置为“MultiExtended”。

当我改变其中一个的选择时,其他的选择也会改变。

现在我认为我对我的 SelectedIndexChanged 处理程序做了一些愚蠢的事情,所以我删除了它们并从头开始重新编写它们,然后遇到了问题。

因此我创建了一个全新的 WinForms 应用程序并将两个列表框拖到表单表面上。

在构造函数中,我用以下内容填充了它们。

List<Thing> data = new List<Thing>();

for ( int i = 0; i < 50; i++ ) {
Thing temp = new Thing();
temp.Letters = "abc " + i.ToString();
temp.Id = i;
data.Add(temp);
}

listBox1.DataSource = data;
listBox1.DisplayMember = "Letters";
listBox1.ValueMember = "Id";


List<Thing> data2 = new List<Thing>();

for ( int i = 0; i < 50; i++ ) {
Thing temp = new Thing();
temp.Letters = "abc " + i.ToString();
temp.Id = i;
data2.Add(temp);
}

listBox2.DataSource = data2;
listBox2.DisplayMember = "Letters";
listBox2.ValueMember = "Id";

然后我构建并运行了应用。

开始选择一些值以查看是否存在症状。他们是!

这实际上是我添加到表单中的所有代码,我没有添加任何事件处理程序,我已经尝试将 SelectionMode 设置为“One”和“MultiExtended”。

谁能告诉我为什么会这样。

干杯

最佳答案

存储当前位置的不是 list - 它是 CurrencyManager .与 BindingContext 具有相同引用的任何控件(具有相同的 DataSource)将分享一个CurrencyManager .通过使用不同的列表实例,您会得到不同的 CurrencyManager实例,从而分开位置。

您可以简单地通过使用 .ToList() 来实现相同的目的,或创建一个新的 List<T>具有相同的内容(根据您的原始帖子),或者分配一个新的 BindingContext到其中一个控件:

control.BindingContext = new BindingContext();

关于c# - 更改 ListBox 的选择会更改其他 ListBox 的选择。这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/285446/

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