[英]keeping only 5 items in a listbox
我想创建一个简单的列表框,该列表框绑定到链表。 该列表在任何给定时间只能容纳5个项目。 添加新项目时,应检查是否项目计数>= 5
,然后删除最后一个项目并将新项目添加到顶部。
为此,我制作了这个测试应用程序:
public partial class Form1 : Form
{
LinkedList<string> list01 = new LinkedList<string>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
list01.AddFirst("AAA");
list01.AddFirst("BBB");
list01.AddFirst("CCC");
listBox1.DataSource = new BindingSource(list01, "");
}
private void button1_Click(object sender, EventArgs e)
{
if (list01.Count >= 5)
list01.RemoveLast();
list01.AddFirst(DateTime.Now.ToString());
listBox1.DataSource = new BindingSource(list01, "");
}
}
似乎,每当我添加新项目时,都必须继续将数据源设置为新的绑定源,以使添加的项目显示在UI上
有没有办法使一个绑定源流行化,并且当其中的项目更改时,自动更新列表框,而不必每次添加新项目时都设置数据源?
您需要一个实现集合更改通知的集合。 有BindingList<T>
和ObservableCollection<T>
两个选项。
选择任何一个,从您的评论看来,您只是在寻找AddFirst
和RemoveLast
。 您可以自己创建一个扩展方法。
public static class BindingListExtension
{
public static void AddFirst<T>(this BindingList<T> list, T item)
{
list.Insert(0, item);
}
public static void RemoveLast<T>(this BindingList<T> list)
{
list.RemoveAt(list.Count - 1);
}
}
根据Sriram Sakthivel's
建议,我达到了这样的要求:
public partial class Form1 : Form
{
BindingList<string> list01 = new BindingList<string>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
listBox1.DataSource = list01;
list01.Add("AAA");
list01.Add("BBB");
list01.Add("CCC");
}
private void button1_Click(object sender, EventArgs e)
{
if (list01.Count >= 5)
list01.RemoveAt(4);
list01.Insert(0, DateTime.Now.ToString());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.