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