ListView 使用向上和向下按钮移动项目 .NET Framework
ListView Move Item with Up and Down Button .NET Framework
我有问题!
我有一个列表视图,其中包含随机数量的项目(根据文档的页面)。但我需要有重新排序这些页面的选项(它们是列表视图项目)。我做了一个在两个按钮(向上和向下)上使用的功能,但它没有正确重新排序。例如:我有两个项目(第 1 页和第 2 页),我想将第 2 页移动到位置 0,它移动但在列表视图中它仍然显示以前的顺序。在我用更多页面制作的其他示例中。
下面是代码和他的调用。
private void moveImgList(int direction)
{
if (list_image.SelectedItems == null) { return; }
ListViewItem item = list_image.SelectedItems[0];
int newIndex = item.Index + direction;
if (newIndex < 0 || newIndex >= list_image.Items.Count) { return; }
list_image.Items.Remove(item);
list_image.Items.Insert(newIndex, item);
}
方法调用
private void btnLeft_Click(object sender, EventArgs e)
{
this.moveImgList(-1);
}
private void btnRight_Click(object sender, EventArgs e)
{
this.moveImgList(1);
}
应用程序Windows Form .NET Framework
原来如此!
private void moveItem(int direction)
{
if (listView1.SelectedItems.Count == 0) { return; }
ListViewItem item = listView1.SelectedItems[0];
int newIndex = item.Index + direction;
if (newIndex < 0 || newIndex >= listView1.Items.Count) { return; }
var currentView = listView1.View;
listView1.BeginUpdate();
listView1.View = View.Details;
listView1.Items.Remove(item);
listView1.Items.Insert(newIndex, item);
listView1.EnsureVisible(newIndex);
listView1.View = currentView;
listView1.EndUpdate();
}
尝试在您的列表视图对象上调用 BeginUpdate()
和 EndUpdate()
方法。这会强制 UI 重新绘制控件。
list_image.BeginUpdate();
list_image.Items.Remove(item);
list_image.Items.Insert(newIndex, item);
list_image.EndUpdate();
当您删除一个项目索引更改时,您可能会插入错误的位置,如果它是最后一个项目,甚至会出现异常。我认为交换 2 个项目更好:
private void moveImgList(int direction)
{
if (list_image.SelectedItems == null) return;
int index = list_image.SelectedIndex;
if((direction == -1 && index == 0) || (index == list_image.Items.Count - 1 && direction =1)
return;
int newIndex = index + direction;
tmp = list_image.Items[index].Clone();
list_image.Items[index] = (ListViewItem)list_image.Items[newIndex].Clone();
list_image.Items[newIndex] = (ListViewItem)tmp;
}
然后这会起作用:
private void btnLeft_Click(object sender, EventArgs e)
{
moveImgList(-1);
}
private void btnRight_Click(object sender, EventArgs e)
{
moveImgList(1);
}
我有问题!
我有一个列表视图,其中包含随机数量的项目(根据文档的页面)。但我需要有重新排序这些页面的选项(它们是列表视图项目)。我做了一个在两个按钮(向上和向下)上使用的功能,但它没有正确重新排序。例如:我有两个项目(第 1 页和第 2 页),我想将第 2 页移动到位置 0,它移动但在列表视图中它仍然显示以前的顺序。在我用更多页面制作的其他示例中。 下面是代码和他的调用。
private void moveImgList(int direction)
{
if (list_image.SelectedItems == null) { return; }
ListViewItem item = list_image.SelectedItems[0];
int newIndex = item.Index + direction;
if (newIndex < 0 || newIndex >= list_image.Items.Count) { return; }
list_image.Items.Remove(item);
list_image.Items.Insert(newIndex, item);
}
方法调用
private void btnLeft_Click(object sender, EventArgs e)
{
this.moveImgList(-1);
}
private void btnRight_Click(object sender, EventArgs e)
{
this.moveImgList(1);
}
应用程序Windows Form .NET Framework
原来如此!
private void moveItem(int direction)
{
if (listView1.SelectedItems.Count == 0) { return; }
ListViewItem item = listView1.SelectedItems[0];
int newIndex = item.Index + direction;
if (newIndex < 0 || newIndex >= listView1.Items.Count) { return; }
var currentView = listView1.View;
listView1.BeginUpdate();
listView1.View = View.Details;
listView1.Items.Remove(item);
listView1.Items.Insert(newIndex, item);
listView1.EnsureVisible(newIndex);
listView1.View = currentView;
listView1.EndUpdate();
}
尝试在您的列表视图对象上调用 BeginUpdate()
和 EndUpdate()
方法。这会强制 UI 重新绘制控件。
list_image.BeginUpdate();
list_image.Items.Remove(item);
list_image.Items.Insert(newIndex, item);
list_image.EndUpdate();
当您删除一个项目索引更改时,您可能会插入错误的位置,如果它是最后一个项目,甚至会出现异常。我认为交换 2 个项目更好:
private void moveImgList(int direction)
{
if (list_image.SelectedItems == null) return;
int index = list_image.SelectedIndex;
if((direction == -1 && index == 0) || (index == list_image.Items.Count - 1 && direction =1)
return;
int newIndex = index + direction;
tmp = list_image.Items[index].Clone();
list_image.Items[index] = (ListViewItem)list_image.Items[newIndex].Clone();
list_image.Items[newIndex] = (ListViewItem)tmp;
}
然后这会起作用:
private void btnLeft_Click(object sender, EventArgs e)
{
moveImgList(-1);
}
private void btnRight_Click(object sender, EventArgs e)
{
moveImgList(1);
}