簡體   English   中英

在列表框中僅保留5個項目

[英]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>兩個選項。

選擇任何一個,從您的評論看來,您只是在尋找AddFirstRemoveLast 您可以自己創建一個擴展方法。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM