C# 如何在listview中将每个项目自动上移一个索引?

C# 如何在listview中将每个项目自动上移一个索引?,c#,winforms,listview,indexing,C#,Winforms,Listview,Indexing,这是我在表单1构造函数中的代码: public Form1() { InitializeComponent(); ColumnHeader header = new ColumnHeader(); header.Text = ""; header.Name = "col1"; listView1.Columns.Add(header); listView1.View = View.Details; listView1.Scrollable

这是我在
表单1
构造函数中的代码:

public Form1()
{
    InitializeComponent();

    ColumnHeader header = new ColumnHeader();
    header.Text = "";
    header.Name = "col1";
    listView1.Columns.Add(header);
    listView1.View = View.Details;
    listView1.Scrollable = true;
    readableRss = RssReader.covertRss("http://rotter.net/rss/rotternews.xml");

    lines = Regex.Split(readableRss, "\r\n").ToList();

    for (int i = 0; i < lines.Count; i++)
    {
        listView1.Items.Add(lines[i]);
    }
    header.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);

    for (int i = 0; i < listView1.Items.Count; i++)
    {
        var currentIndex = listView1.SelectedItems[i].Index;
        var item = listView1.Items[i];
        if (currentIndex > 0)
        {
            listView1.Items.RemoveAt(currentIndex);
            listView1.Items.Insert(currentIndex - 1, item);
        }
    }
我添加了一个计时器,在计时器滴答声事件中我正在这样做。 它在工作,但问题是它移动不平稳,但每上升一个位置,线条就会跳跃。我希望它能像电影的结尾一样平滑地移动,当你看到电影的片酬上升时

我应该在计时器滴答声事件代码中更改/添加什么

编辑**

这就是我现在在计时器滴答声事件中所做的:

this.Invalidate();
            var r = Enumerable.Empty<ListViewItem>();

            if (this.listView1.Items.Count > 0)
                r = this.listView1.Items.OfType<ListViewItem>();

            var last = r.LastOrDefault();

            if (last != null)
            {
                listView1.Items.Insert(0, last);
                listView1.Items.Remove(last);
            }
this.Invalidate();
var r=Enumerable.Empty();
如果(this.listView1.Items.Count>0)
r=this.listView1.Items.OfType();
var last=r.LastOrDefault();
if(last!=null)
{
listView1.Items.Insert(0,最后一个);
listView1.Items.Remove(最后一个);
}
但我遇到异常:无法在多个位置添加或插入项“”。您必须首先将其从当前位置删除或克隆

我做错了什么?

在计时器中尝试以下方法:

int count;
if ((count = listView1.Items.Count) > 0)
{
   var LastItem = listView1.Items[count - 1];
   listView1.Items.Remove(LastItem);
   listView1.Items.Insert(0, LastItem);
}

那太奇怪了!我能问一下你为什么需要这个吗?这是一个新闻订阅器,我使用一个新网站的Rss。所以我希望用户看到新闻,看到它自动移动,而不是每次用鼠标向下滚动。因为每次新闻都会更新,所以我希望它是自动更新的。用我到目前为止所做的事情更新了我的问题。无论如何,为什么不使用
Items.Insert(0,lastitem)
并删除您的最后一项?在计时器滴答事件中?Justin我在以下行中遇到异常:listView1.Items.Insert(0,lastitem);无法在多个位置添加或插入项“”。您必须首先将其从当前位置删除或克隆
int count;
if ((count = listView1.Items.Count) > 0)
{
   var LastItem = listView1.Items[count - 1];
   listView1.Items.Remove(LastItem);
   listView1.Items.Insert(0, LastItem);
}