gpt4 book ai didi

c# - 将列表与列表框同步?

转载 作者:行者123 更新时间:2023-11-30 15:45:15 25 4
gpt4 key购买 nike

我的 WinForms 上有一个列表框,用户可以在其中上下移动项目,该列表框与我的列表一样,我想知道保持两者同步的最有效方法是什么。

例如要向下移动一个项目我有:

int i = this.recoveryList.SelectedIndex;
object o = this.recoveryList.SelectedItem;

if (i < recoveryList.Items.Count - 1)
{
this.recoveryList.Items.RemoveAt(i);
this.recoveryList.Items.Insert(i + 1, o);
this.recoveryList.SelectedIndex = i + 1;
}

我有:

public List<RouteList> Recovery = new List<RouteList>();

我想针对列表框保持更新。

我应该简单地清除 Recovery 并使用当前的列表框数据更新,还是有更好的方法在向上和向下移动时更新两者?

主要是因为listbox和list的类型不一样

最佳答案

.Net 为这种行为提供了内置支持。为了使用它,您需要将恢复列表的类型更改为:

public BindingList<RouteList> Recovery = new BindingList<RouteList>();

然后您将该 BindingList 用作控件中的数据源:

listBox1.DataSource = Recovery;

这是一个使用 String 的 BindingList 的简单示例。我在表单上有两个列表框,当所选元素与列表中的第一个元素交换时,它们都保持同步:

public partial class Form1 : Form
{
private readonly BindingList<string> list = new BindingList<string> { "apple", "pear", "grape", "taco", "screwdriver" };

public Form1()
{
InitializeComponent();
listBox1.DataSource = list;
listBox2.DataSource = list;
}

private void listBox1_KeyUp(object sender, KeyEventArgs e)
{
var tmp = list[0];
list[0] = list[listBox1.SelectedIndex];
list[listBox1.SelectedIndex] = tmp;
}
}

关于c# - 将列表与列表框同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5375078/

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