[英]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.