这是Form1
构造函数中的代码:
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);
}
}
在FOR循环中我收到错误,因为listView1.SelectedItems[i].Index;
不能为0
索引。
我的目标是将listBox1
中的每个项目平稳缓慢地移动到一个位置,并将其下方的项目向上移动等等所有项目在无限循环中,当最后一个项目到达顶部时底部用第一个项目再次重复它。就像一个行选框效果。
我该怎么做?
这就是我尝试过的。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace RssNewsFeeder
{
public partial class Form1 : Form
{
int lastIndex;
string readableRss;
private List<string> lines = new List<string>();
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);
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
this.Refresh();
int i = listView1.TopItem == null ? -1 : listView1.TopItem.Index;
if (i > -1)
{
if (i == lastIndex || i == listView1.Items.Count - 2) i = 0;
lastIndex = i;
listView1.TopItem = listView1.Items[++i];
}
}
}
}
我添加了一个计时器,在计时器滴答事件中,我正在这样做。 它的工作但问题是它没有移动平稳,但每次一个地方都会跳线。我希望它能在电影结束时顺畅地移动,当你看到积分向上移动时。
我应该在计时器刻度事件代码中更改/添加什么?
编辑**
这就是我现在在计时器刻度事件中所做的:
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);
}
但我得到例外:无法在多个地方添加或插入项目。您必须先将其从当前位置删除或克隆它
我做错了什么?
答案 0 :(得分:1)
在你的计时器中尝试这种方式:
int count;
if ((count = listView1.Items.Count) > 0)
{
var LastItem = listView1.Items[count - 1];
listView1.Items.Remove(LastItem);
listView1.Items.Insert(0, LastItem);
}