【问题标题】:How come I need to remove the current item in my listview before adding another one?为什么我需要在添加另一个之前删除列表视图中的当前项目?
【发布时间】:2017-03-29 09:29:26
【问题描述】:

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

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

System.ArgumentException: 'Cannot add or insert the item '11:24' in 不止一处。您必须首先将其从当前的 定位或克隆它。'

有没有一种方法可以让我在不删除或克隆它的情况下克服它?

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);
        }
    }
}

【问题讨论】:

  • 你不能重复使用相同的ListViewItem,这样让它全局化是没有意义的。将行 ListViewItem lvi = new ListViewItem(); 移动到 btnAdd_Click 方法中,这将每次创建一个新项目,这是所需的行为。
  • 我试图将此应用到我没有引起任何关注的其他问题上,也许您可​​以帮助My other question 更新链接

标签: c# listview


【解决方案1】:

您一次又一次地添加相同的项目(不同的文本并不意味着它是另一个项目)。 ListViewAdd 方法具有接受字符串的重载。这样会自动创建一个新的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.不要混淆。如果它解决了您的要求,请标记它,我们就完成了。 2.您发布的链接是关于异步下载的。看不到连接。
  • 更新了链接。
  • 我也不能接受答案还忘了告诉你。
【解决方案2】:
    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);
    }

你可以用这个。

【讨论】:

  • 这将从列表视图中删除已经存在的项目。它是如何解决保留之前添加的项目的问题的?
  • 它不会从列表视图控件中删除上一个项目。它在列表中添加新项目
猜你喜欢
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多