只保留列表框中的5个项目

时间:2014-05-22 11:14:36

标签: c# winforms

我想创建一个简单的列表框,它绑定到一个链表。 该列表应该在任何给定时间只能容纳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, "");
    }
}

看来,当我添加新项目时,我必须继续将数据源设置为新的绑定源,以便在U.I上显示添加的项目。

是否可以初始化一个绑定源,当其中的项目发生更改时,无需每次添加新项目时都自动更新列表框而不必设置数据源?

2 个答案:

答案 0 :(得分:1)

您需要一个实现集合更改通知的集合。您有两个选项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);
    }
}

答案 1 :(得分:0)

根据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());
    }
}