为什么我需要在添加另一个项目之前删除列表视图中的当前项目?

时间:2017-03-29 09:29:26

标签: c# listview

所以我尝试新的东西...... 我在代码的顶部添加了一个全局ListViewItem,这样每当我看到它适合时,我就可以轻松地将新的子项添加到列表中。

因此,为了尝试这种新方法,我制作了一个简单的列表视图和一个添加当前时间的按钮。 当我点击它一次它工作得很好,但如果我再次尝试点击添加它会抛出这个错误。

  

System.ArgumentException:'无法添加或插入项目' 11:24'在   不止一个地方。您必须先将其从当前删除   定位或克隆它。'

有没有一种方法可以在不删除或克隆它的情况下解决这个问题?

using System;
using System.Windows.Forms;

namespace Listviews
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        ListViewItem lvi = new ListViewItem();

        private void btnAdd_Click(object sender, EventArgs e)
        {
            string time = DateTime.Now.ToString("HH:mm");
            lvi.Text = time;
            listView1.Items.Add(lvi);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

您是一次又一次地添加相同的项目(不同的文字不是意味着它是另一个项目)。 Add ListView方法有一个接受字符串的重载。这样就会自动创建一个新的listviewitem

namespace Listviews
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // Not needed
        //ListViewItem lvi = new ListViewItem();

        private void btnAdd_Click(object sender, EventArgs e)
        {
            string time = DateTime.Now.ToString("HH:mm");
            // Just add the time directly as a string
            listView1.Items.Add(time);
        }
    }
}

或者查看您问题的第一条评论。但只要您不想修改项目或将其存储在外部,您就不需要创建listViewItem

答案 1 :(得分:0)

    ListViewItem lvi;
    private void button1_Click(object sender, EventArgs e)
    {
        lvi  = new ListViewItem();
        string time = DateTime.Now.ToString("HH:mm");
        lvi.Text = time;
        listView1.Items.Add(lvi);
    }

你可以使用它。