繁体   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